如何在devise中validation用户的密码

我遇到了一个问题,在rails中使用devise gem来匹配用户密码。 用户密码存储在我的数据库这是encrypted_pa​​ssword,我想通过密码find用户,但我不知道如何匹配密码从表单和encrypted_pa​​ssword在我的数据库。

User.find_by_email_and_password(params[:user][:email], params[:user][:password]) 

我认为这是一个更好,更优雅的方式:

 user = User.find_by_email(params[:user][:email]) user.valid_password?(params[:user][:password]) 

另一种从用户实例中生成摘要的方法是给我保护的方法错误。

使用devise方法

Devise为您提供了内置的方法来validation用户的密码

 user = User.find_for_authentication(email: params[:user][:email]) user.valid_password?(params[:user][:password]) 

对于使用Strong Params的Rails 4+ ,你可以这样做:

 def login user = User.find_for_authentication(email: login_params[:email]) if user.valid_password?(login_params[:password]) user.remember_me = login_params[:remember_me] sign_in_and_redirect(user, event: :authentication) end end private def login_params params.require(:user).permit(:email, :password, :remember_me) end 

我认为更好的是这个

 valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password]) 
 user = User.find_by_email_and_password(params[:user][:email]) user.valid_password?(params) 

@ joshaidan是真实的答案

我会build议这一点。

 user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)