现在已经和它斗争了一段时间,不知道它为什么不起作用.
要点是将Devise与LDAP结合使用.除了自定义策略之外,我不需要做任何事情,所以除了自定义策略之外我不需要使用任何东西.
我基于https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP创建了一个,据我所知,一切都应该工作,除非我尝试运行服务器(或rake路由),我得到一个NameError
lib/devise/models.rb:88:in `const_get': uninitialized constant Devise::Models::LdapAuthenticatable (NameError)
我已将错误追溯到我的app / models / user.rb
class User < ActiveRecord::Base devise :ldap_authenticatable,:rememberable,:trackable,:timeoutable end
如果我删除:ldap_authenticatable然后崩溃消失但我没有到用户#session的路由,并且无法访问登录提示.
LIB / ldap_authenticatable.rb
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 = 'redacted' ldap.port = 389 ldap.auth login,password if ldap.bind user = User.where(login: login).first_or_create do |user| success!(user) else fail(:invalid_login) end end end def login params[:user][:login] end def password params[:user][:password] end end end end Warden::Strategies.add(:ldap_authenticatable,Devise::Strategies::LdapAuthenticatable)
最后,在config / initializers / devise.rb中
Devise.setup do |config| # ==> LDAP Configuration require 'ldap_authenticatable' config.warden do |manager| manager.default_strategies(:scope => :user).unshift :ldap_authenticatable end end
我已经用尽了我的搜索,也许有人可以看到我失踪的东西.
干杯