2017-09-12 14 views
1

私はRuby on Railsを初心者だと私は私のプロジェクトではエラー処理 - 電子メールのLDAP - レール

を助ける必要がある、私は、LDAP上のユーザーの電子メールをキャッチする必要があります。

class User < ActiveRecord::Base 

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

#validates :username, presence: true, uniqueness: true 
validates :email, presence: true 
validates_uniqueness_of :email 
before_validation :get_ldap_email 
before_save :get_ldap_email 

def get_ldap_email 
    self.email = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail").first 
end 

しかし、LDAPで電子メールを持っていない場合は、Rails'のエラーメッセージを表示し、私は私が作ったメッセージでページにリダイレクトします。

私はSessionControllerで "if"を作成したいが、メソッドを呼び出すのに成功していない。

class Users::SessionsController < Devise::SessionsController 
require_relative '../../models/User.rb' 

def create 
super 
if get_ldap_email == nil 
    # redirect to /errorlogin 
end 
end 

そして、ここで提示メッセージ

undefined local variable or method `get_ldap_email' for # 
Users::SessionsController:0x67342e0> 

はまた、私は「私はドンこのメッセージ

Validation failed: Email can't be blank 

を表示...このため

def get_ldap_email 

ldapEmail = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail") 
if ldapEmail == nil 

else 
    self.email = ldapEmail.first 
end 
end 

しかしをユーザーmodificed私がする必要があるもの...

答えて

0

get_ldap_emailの前にsuperを呼び出しているため、DeviseのSessionControllerの検証で有効なメールがチェックされています。これはうまくいくはずです:

def create 
    if get_ldap_email == nil 
    # redirect to /errorlogin 
    end 
    super 
end 
関連する問題