在确认电子邮件时,Ruby in Rails错误



我正在使用rails5上的设计来确认登录的电子邮件地址。一切正常,直到我单击确认链接。然后它向我显示了这个错误:

name eRnor in Devise ::确认controller#show

未定义的本地变量或方法`signin'for#<班级:0x007fb1cbe56b48>

这是导致错误的代码:

        conditions = warden_conditions.dup
        where(conditions).where(["lower(username) = :value OR lower(email)
            = :value", { :value => signin.downcase }]).first
end

这是我的模型上述代码属于:

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :confirmable
attr_accessor :signin
validates :username, :uniqueness => {:case_sensitive => false}
def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
        where(conditions).where(["lower(username) = :value OR   lower(email)
            = :value", { :value => signin.downcase }]).first
end 

有人可以帮助我吗?如果您给我一些有关此方法如何工作的信息?

第一件事, attr_accessor定义了一个实例方法,而不是类方法,因此,如果您在类似self.find_first_by_auth_conditions的类方法中调用signin,则会使您置于undefined local variable or method 'signin' for #< Class:0x007fb1cbe56b48>错误。

第二,您的find_for_database_authentication方法不完整。您应该按照此示例为基础:

def self.find_for_database_authentication(warden_conditions)
  conditions = warden_conditions.dup
  if login = conditions.delete(:login)
    where(conditions.to_h).where([
      "lower(username) = :value OR lower(email) = :value", 
      { :value => login.downcase }
    ]).first
  elsif conditions.has_key?(:username) || conditions.has_key?(:email)
    where(conditions.to_h).first
  end
end

我不确定您是否已经将该示例用作基础,但是如果您解释了修改它的原因,那就太好了。我没有理由,请使用该代码。

我在这里发表评论。我不知道您如何处理登录,但是我的操作方式是在会话控制器和会话助手中:

#Session Controller
 def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:email].downcase)
      log_in user
      redirect_back_or user
      flash[:success] = "You are logged in"
    else
      flash[:danger] = "Wrong email or password"
      render 'new'
    end
  end

我使用的" log_in(用户)"方法是在会话助手中定义的。

#Session Helper
  def log_in(user)
    session[:user_id] = user.id
  end

最新更新