Rails设计LDAP错误:Devise中的NoMethodError :: SessionsController #create

时间:2013-05-01 22:59:02

标签: ruby-on-rails ruby-on-rails-3 devise ldap

我的团队已在rails应用程序上设置我的ruby以使用devise ldap。每当用户第一次登录时,它会在Users模型中创建一个新条目,并且完全正常。但是,只要Users数据库中已存在的用户尝试登录,就会出现以下错误:

NoMethodError in Devise::SessionsController#create

undefined method `to' for nil:NilClass

从查看服务器控制台看,它似乎在这个SQL语句上失败了:

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

我认为服务器没有得到该查询的结果。

但每当我在ruby控制台中运行相同的sql语句时,它会给出正确的结果(尝试登录的用户的记录)

以下是我的一些设计配置。我是设计和ruby的新手(我也没有安装设备)所以请告诉我你是否需要其他配置文件来调试这个问题。

初始化/ 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

1 个答案:

答案 0 :(得分:0)

我的问题发生了,因为我有两个继承自User(Client和Runner)的表,他们都尝试使用相同的ldap进行身份验证。当我拿出单表继承时,一切正常。