2013-05-01 4 views
0

Моя команда настроила мое рубиновое приложение на rails для работы с devd ldap. Всякий раз, когда пользователь входит в систему в первый раз, он создает новую запись в модели Users и работает полностью нормально. Но всякий раз, когда пользователь, который уже существует в Пользователями базы данных пытается войти в это дает следующее сообщение об ошибке:Rails Devise LDAP Ошибка: NoMethodError в разработке :: SessionController # create

NoMethodError in Devise::SessionsController#create 

undefined method `to' for nil:NilClass 

Глядя на консоли сервера, похоже, это не удается на этом SQL заявление:

SELECT `users`.* FROM `users` WHERE `users`.`username` = 'jDoe' LIMIT 1 

Я думаю, что сервер не получает результатов от этого запроса.

Но всякий раз, когда я запускаю тот же оператор SQL в консоли рубина, он дает правильный результат (запись пользователя, пытающегося войти)

Вот некоторые из моих DEViSE конфиги. Я новичок в разработке и рубине (и я также не устанавливал программу), поэтому дайте мне знать, если вам нужны другие файлы конфигурации для отладки этой проблемы.

Инициализаторы/devise.rb

Devise.setup do |config| 

    config.ldap_create_user = true 
    config.ldap_update_password = false 

    config.mailer_sender = "****" 

    require 'devise/orm/active_record' 

    config.authentication_keys = [ :username ] 

    config.case_insensitive_keys = [ :email ] 

    config.strip_whitespace_keys = [ :email ] 

    config.skip_session_storage = [:http_auth] 

    config.stretches = Rails.env.test? ? 1 : 10 

    config.reconfirmable = true 

    config.password_length = 8..128 

    config.sign_out_via = :delete 

end 

ldap.yml

authorizations: &AUTHORIZATIONS 
    group_base: ou=groups,dc=test,dc=com 

    required_groups: 

    - cn=admins,ou=groups,dc=test,dc=com 
    - cn=users,ou=groups,dc=test,dc=com 

    - ["moreMembers", "cn=users,ou=groups,dc=test,dc=com"] 

    require_attribute: 
    objectClass: inetOrgPerson 
    authorizationRole: postsAdmin 

development: 
    host: **** 
    port: 636 
    attribute: uid 
    base: ou=People,dc=***,dc=com 
    admin_user: cn=admin,dc=test,dc=com 
    admin_password: admin_password 
    ssl: true 

test: 
    host: localhost 
    port: 3389 
    attribute: cn 
    base: ou=people,dc=test,dc=com 
    admin_user: cn=admin,dc=test,dc=com 
    admin_password: admin_password 
    ssl: simple_tls 

production: 
    host: localhost 
    port: 636 
    attribute: cn 
    base: ou=people,dc=test,dc=com 
    admin_user: cn=admin,dc=test,dc=com 
    admin_password: admin_password 
    ssl: start_tls 

user.rb

class User < ActiveRecord::Base 
    devise :ldap_authenticatable, :rememberable, :trackable 
    attr_accessible :name, :cell, :email, :pref, :type, :username, :password, :password_confirmation, :remember_me 
end 
+0

Кто-нибудь это понял? У Iv была та же проблема. – Cheyne

ответ

0

Моя проблема возникла потому, что я имеет 2 таблицы, унаследованные от пользователя (клиент и бегун), и оба они пытались выполнить аутентификацию с помощью одного и того же ldap. Когда я вынул однонаправленное наследование, все работало нормально.

Смежные вопросы