2011-10-27 24 views
0

最新のDeviseとldapプラグインでrails 3.1を実行しています。私は電子メールアドレスを使用するデフォルトの動作を交換して、今ユーザフィールドとしてNovell eDirのuid属性を使用しています。Devise/LDAP - 追加のLDAP属性をdbに保存します

私がログインすることができ、私は今、電子メール、私のLDAPからカテゴリと命名し、データベースに挿入されたカスタム属性を取得することであるとstruggelingていますどのようなルートルートなど

をもとにリダイレクトされます。私はbefore_saveの作業をしようとしています。

class User < ActiveRecord::Base 

    before_save :get_ldap_email 
    before_save :get_ldap_category 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :ldap_authenticatable, :rememberable, :trackable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :uid, :category, :email, :password, :password_confirmation, :remember_me 

    def get_ldap_email 
     self.email = Devise::LdapAdapter.get_ldap_param(self.uid, "mail") 
    end 

    def get_ldap_category 
     self.category = Devise::LdapAdapter.get_ldap_param(self.uid, "category") 
    end 

end 

私はおそらくダムですが、これはうまく動作しません。私はログイン時に私の見解から次の結果を得ます:

NoMethodError in Devise::SessionsController#create 

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 
Rails.root: /home/ntr/Dropbox/source/devise 

Application Trace | Framework Trace | Full Trace 
Request 

Parameters: 

{"utf8"=>"✓", 
"authenticity_token"=>"jljpH9bUXrPeBVy4jKnJoAfeuO/EiF0YxRqxm07VF5w=", 
"user"=>{"uid"=>"ntr", 
"password"=>"[FILTERED]", 
"remember_me"=>"0"}, 
"commit"=>"Logga in"} 
Show session dump 

Show env dump 

Response 

Headers: 

None 

私は間違っていますか?これで何か助けてもらいたいですね!

敬具 //ロジャー

+0

何がうまくいかなかったのを見つけましたか? – Ninad

+0

私はいいえ、私は恐れると言う必要があります。しかし、私はこの問題に遭遇している唯一の人ではないようです。 –

答えて

2

私はそれはあなたを助けるあるわからないんだけど、あなたがそのようにそれを使用することができます:

self.firstname = Devise::LdapAdapter.get_ldap_param(self.username, 'givenName').first 
self.lastname = Devise::LdapAdapter.get_ldap_param(self.username, 'sn').first  
self.email = Devise::LdapAdapter.get_ldap_param(self.username, 'mail').first 

検索ではなく、1いくつかの結果をフェッチするとき、この問題が発生し、あなたはここではnil valuse を得るでしょう、常に配列がLDAP自然に死ぬ戻るハックです:configファイル/初期化/ devise.rbパッチ以下を追加で :

module Devise 
    module LdapAdapter 
    class LdapConnect 
     def ldap_param_value(param) 
     filter = Net::LDAP::Filter.eq(@attribute.to_s, @login.to_s) 
     ldap_entry = nil 
     @ldap.search(:filter => filter) {|entry| ldap_entry = entry} 

     if ldap_entry 
      if ldap_entry[param] 
      DeviseLdapAuthenticatable::Logger.send("Requested param #{param} has value #{ldap_entry.send(param)}") 
      value = ldap_entry.send(param)   
      else 
      DeviseLdapAuthenticatable::Logger.send("Requested param #{param} does not exist") 
      #changes here 
      value = nil 
      end 
     else 
      DeviseLdapAuthenticatable::Logger.send("Requested ldap entry does not exist") 
      value = nil 
     end 
     end 
    end 
    end 
end 

https://github.com/cschiewek/devise_ldap_authenticatable/issues/69をさらに見て、パッチを元のコードと比較して理解してください。

+0

これをチェック... thanx:D –

関連する問題