我在跑步:
红宝石 1.9.3p0,
轨道 3.1.1,
设计1.4.9,
Devise_ldap_authenticatable 0.4.10
我正在使用 Devise 通过 LDAP 服务器验证我的 Rails 应用程序。我使用用户名而不是电子邮件进行身份验证,因此表中的电子邮件字段自然是空白的。
要查询 ldap 中的电子邮件,官方方法是在用户模型中添加以下代码:
before_save :get_ldap_email
def get_ldap_email
self.email = Devise::LdapAdapter.get_ldap_param(self.username,"mail")
end
此代码失败,没有尝试对 ldap 执行任何操作,如下所示:
undefined method `mail' for nil:NilClass
它指的是方法定义内的行。日志输出不再有帮助:
Started POST "/users/sign_in" for 10.50.1.96 at 2011-11-15 11:18:16 -0800
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"<hidden>=", "user"=>{"username"=>"<hidden>", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."username" = '<hidden>' LIMIT 1
LDAP: LDAP dn lookup: uid=<hidden>
LDAP: LDAP search for login: uid=<hidden>
LDAP: Authorizing user <hidden>
LDAP: LDAP dn lookup: uid=<hidden>
LDAP: LDAP search for login: <hidden>
Completed 500 Internal Server Error in 251ms
NoMethodError (undefined method `mail' for nil:NilClass):
app/models/user.rb:14:in `get_ldap_email'
500 错误之前的所有行都是正常的 LDAP 成功身份验证,与电子邮件查询无关。
我上周才开始学习 Ruby、Rails 和 Devise,所以我不确定哪些文件最能说明问题,但这是我的 user.rb 模型和 gemfile:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :ldap_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_save :get_ldap_email
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :username, :password, :password_confirmation, :remember_me
def get_ldap_email
self.email = Devise::LdapAdapter.get_ldap_param(self.username,"mail")
end
end
和宝石文件:
source 'http://rubygems.org'
gem 'rails', '3.1.1'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
<... unrelated ...>
gem 'therubyracer', :platforms => :ruby
gem "devise"
gem "devise_ldap_authenticatable"
我尝试重新启动服务器,并自上次 GemFile 更新以来完成了捆绑安装。我的配置有 ldap_create_user = true ,用户名是用户中正确的字段名称。该方法有错误吗?会不会是版本不兼容?我不太确定还需要检查什么,并且 Rails 没有给我提供任何适合初学者的东西。我希望得到一些帮助。