我在使用rails中的devise gem匹配用户密码时遇到问题。存储在我的数据库上的用户密码是encrypted_password,我试图通过密码查找用户,但我不明白如何匹配表格中的密码和我的数据库中的encrypted_password。
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
答案 0 :(得分:255)
我认为这是一种更好,更优雅的方式:
user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])
从用户实例生成摘要的另一种方法是给我受保护的方法错误。
答案 1 :(得分:14)
Devise为您提供 built-in methods to verify a user's password :
user = User.find_for_authentication(email: params[:user][:email])
user.valid_password?(params[:user][:password])
对于 Rails 4+ with Strong Params ,您可以这样做:
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
答案 2 :(得分:6)
我认为更好的将是这个
valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])
答案 3 :(得分:3)
user = User.find_by_email_and_password(params[:user][:email])
user.valid_password?(params[:user][:password])
@joshaidan是真实答案
答案 4 :(得分:0)
我会建议这样做。
user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)