如何在devise中validation用户的密码
我遇到了一个问题,在rails中使用devise gem来匹配用户密码。 用户密码存储在我的数据库这是encrypted_password,我想通过密码find用户,但我不知道如何匹配密码从表单和encrypted_password在我的数据库。
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)