Ruby on Rails 3: ошибка неопределенного метода Devise :: LdapAdapter.get_ldap_param

Я использую: Ruby 1.9.3p0, Rails 3.1.1, Devise 1.4.9, {{1} } Devise_ldap_authenticatable 0.4.10

Я использую Devise для аутентификации моего приложения Rails через сервер ldap. Я использую имя пользователя вместо электронной почты для аутентификации, поэтому, естественно, поле электронной почты в моей таблице пустое.

Официальным способом запроса 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

И gemfile:

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 не дает мне ничего удобного для новичков. Мне бы очень хотелось помочь с этим.

6
задан Adam Rackis 15 November 2011 в 21:56
поделиться