ruby on rails - rails - Cómo verificar la contraseña de un usuario en Devise
gema devise (5)
Tengo un problema al hacer coincidir la contraseña del usuario con el diseño de la gema en los rieles. Contraseña de usuario almacenada en mi db que es encrypted_password y estoy tratando de encontrar al usuario por contraseña, pero no entiendo cómo hacer coincidir la contraseña del formulario y la contraseña cifrada en mi db.
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
Usar métodos de cálculo
Devise le proporciona métodos integrados para verificar la contraseña de un usuario :
user = User.find_for_authentication(email: params[:user][:email])
user.valid_password?(params[:user][:password])
Para Rails 4+ con Strong Params , puedes hacer algo como esto:
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
Creo que el mejor será este
valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])
Creo que esta es una forma mejor y más elegante de hacerlo:
user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])
El otro método donde se genera el resumen de la instancia del usuario me daba errores de método protegido.
Sugeriría esto
user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)
user = User.find_by_email_and_password(params[:user][:email])
user.valid_password?(params)
@joshaidan es una respuesta verdadera