J'ai un problème pour faire correspondre le mot de passe de l'utilisateur à l'aide de gem gem dans Rails. Mot de passe utilisateur stocké sur ma base de données qui est encrypted_password et j'essaie de trouver l'utilisateur par mot de passe, mais je ne comprends pas comment faire correspondre le mot de passe du formulaire et encrypted_password dans ma base de données.
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
Je pense que c'est une façon meilleure et plus élégante de le faire:
user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])
L'autre méthode où vous générez le résumé à partir de l'instance d'utilisateur me donnait des erreurs de méthode protégées.
Devise vous fournit méthodes intégrées pour vérifier le mot de passe d'un utilisateur:
user = User.find_for_authentication(email: params[:user][:email])
user.valid_password?(params[:user][:password])
Pour Rails 4+ avec des paramètres forts , vous pouvez faire quelque chose comme ceci:
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
Je pense que le meilleur sera celui-ci
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[:user][:password])
@joshaidan est la vraie réponse
Je suggérerais ceci.
user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)