0

私のチームは、devise LDAP で動作するように Ruby on Rails アプリをセットアップしました。ユーザーが初めてログインするときはいつでも、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 ステートメントを実行するたびに、正しい結果 (ユーザーがログインを試みた記録) が得られます。

これが私のデバイス構成の一部です。私はdeviseとrubyを初めて使用します(また、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
4

1 に答える 1

0

私の問題は、ユーザー (クライアントとランナー) から継承した 2 つのテーブルがあり、両方が同じ LDAP で認証しようとしたために発生しました。単一テーブルの継承を取り出したとき、すべてうまくいきました。

于 2013-05-20T22:00:55.050 に答える