ruby-on-rails - 使用 LDAP 进行 Rails 身份验证

标签 ruby-on-rails ruby-on-rails-4 authentication ldap

我正在学习 Rails(没有 Web 开发和 MVC 经验),为了提高我的技能,想要实现一个在 LDAP 中完成身份验证的应用程序。我一直在阅读 Ryan Bigg 的《RAILS 4 IN ACTION》和 Michael Hartl 的《RUBY ON RAILS TUTORIAL》。现在在这些教程中,开发的应用程序需要一个身份验证系统。他们从头开始构建身份验证系统。由于用户名/密码保存在数据库中,因此它们会生成用户模型。我的问题是,如果我将用户数据保存在 LDAP 中(并通过 LDAP 进行身份验证),我是否需要生成用户模型?用户模型还用于保存 cookie(以记住用户 session )。这是否意味着我应该生成用户模型但只保存 session 数据?任何指针将不胜感激。

最佳答案

您当然不需要创建一个继承自 ActiveRecord::Base 类的模型,但是使用某个类来保存用户信息是合适的 - 即使它只是在运行期间时间。或者您真的只想进行身份验证然后忘记用户?

如果您有兴趣使用 LDAP 和事实上的标准 Rails gem 进行身份验证 - devise ,请查看此 Wiki 页面 https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP .

您所要做的就是使用自定义身份验证策略。

require 'net/ldap'
require 'devise/strategies/authenticatable'

module Devise
  module Strategies
    class LdapAuthenticatable < Authenticatable
      def authenticate!
        if params[:user]
          ldap = Net::LDAP.new
          ldap.host = [YOUR LDAP HOSTNAME]
          ldap.port = [YOUR LDAP HOSTNAME PORT]
          ldap.auth email, password

          if ldap.bind
            user = User.find_or_create_by(email: email) #optional lookup
            success!(user) # you do have to return some object
          else
            fail(:invalid_login)
          end
        end
      end

      def email
        params[:user][:email]
      end

      def password
        params[:user][:password]
      end

    end
  end
end

Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)

如果你想避免使用devise,请使用warden-ldap https://github.com/renewablefunding/warden-ldap .

关于ruby-on-rails - 使用 LDAP 进行 Rails 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406867/

相关文章:

jquery - Rails 和 ajax 全局错误处理问题

php - 哪些支付处理框架(如 ActiveMerchant)可用于其他语言?

ruby-on-rails - Rails 帮助文件中的 if 语句?

select - 找不到名称关联-Nested Form Rails 4

ruby-on-rails - Rails 4.2 常量 - 将它们放在哪里 : application. yml 与自定义配置文件.rb

ruby-on-rails - 在 3000 端口主机提供的 IP 上绑定(bind) rails app

ruby-on-rails - 循环访问模型中的所有公共(public)属性

authentication - APEX 中的 Salesforce UserInfo session 类型

python - 如何以编程方式对 Django 中的用户进行身份验证?

php - 如何验证在 Laravel 中更新电子邮件的用户的唯一电子邮件?