错误处理 - 电子邮件 LDAP - Rails

Error Handling - Email LDAP - Rails

我是 Rails Ruby 的初学者,我需要帮助

在我的项目中,我需要在 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>

我还为此修改了用户...

def get_ldap_email

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

 else
  self.email = ldapEmail.first
 end
end

但是现在显示这条消息

Validation failed: Email can't be blank

我不知道我需要做什么...

问题是您在 get_ldap_email 之前调用 super,因此 Devise SessionController 中的验证正在检查有效的电子邮件。这应该有效:

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