使用LDAP进行Rails身份验证

时间:2015-07-14 12:40:11

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您有兴趣将LDAP与事实上的标准Rails gem用于身份验证 - 设计,请查看此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)

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