在 Rails 4 中从 Net/LDAP 迁移到 Devise/LDAP 需要帮助
Need help moving from Net/LDAP to Devise/LDAP in Rails 4
我有一个 Rails 3 应用程序使用 net-ldap, which I'm upgrading to Rails 4 using devise_ldap_authenticatable。
以前,我有一个助手 class 可以使用域对用户进行身份验证。这是在没有任何管理员权限的情况下完成的。这是片段:
class LDAPHelper
def authenticate(host, port, domain)
@ldap = Net::LDAP.new
@ldap.host = host
@ldap.port = port
@ldap.auth "#{domain}\#{@login}", @password
@authenticated = @ldap.bind
end
end
上面的代码片段在我的 Rails 3 应用程序中运行良好。现在,在新的 Rails 4 应用程序中,使用 devise 找不到用户,然后收到未通过身份验证的错误:
LDAP: LDAP dn lookup: cn=myuser
LDAP: LDAP search for login: cn=myuser
LDAP: LDAP search yielded 0 matches
LDAP: Authorizing user cn=myuser,etc...
LDAP: Not authorized because not authenticated.
我试过将属性从 cn
切换到 sAMAccountName
,但是,这似乎没有任何效果。
我想知道这是否与我需要像以前一样以某种方式传递 domain
的事实有关?
我终于明白了。我将此添加到 config/initializers/devise.rb
:
config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "MYDOMAIN\#{login}"}
我有一个 Rails 3 应用程序使用 net-ldap, which I'm upgrading to Rails 4 using devise_ldap_authenticatable。
以前,我有一个助手 class 可以使用域对用户进行身份验证。这是在没有任何管理员权限的情况下完成的。这是片段:
class LDAPHelper
def authenticate(host, port, domain)
@ldap = Net::LDAP.new
@ldap.host = host
@ldap.port = port
@ldap.auth "#{domain}\#{@login}", @password
@authenticated = @ldap.bind
end
end
上面的代码片段在我的 Rails 3 应用程序中运行良好。现在,在新的 Rails 4 应用程序中,使用 devise 找不到用户,然后收到未通过身份验证的错误:
LDAP: LDAP dn lookup: cn=myuser
LDAP: LDAP search for login: cn=myuser
LDAP: LDAP search yielded 0 matches
LDAP: Authorizing user cn=myuser,etc...
LDAP: Not authorized because not authenticated.
我试过将属性从 cn
切换到 sAMAccountName
,但是,这似乎没有任何效果。
我想知道这是否与我需要像以前一样以某种方式传递 domain
的事实有关?
我终于明白了。我将此添加到 config/initializers/devise.rb
:
config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "MYDOMAIN\#{login}"}