web-dev-qa-db-ja.com

Deviseでユーザーのパスワードを確認する方法

Railsでdevise gemを使用してユーザーパスワードを一致させるのに問題があります。 encrypted_pa​​sswordであるdbに保存されているユーザーパスワード。パスワードでユーザーを検索しようとしていますが、dbのフォームとencrypted_pa​​sswordからパスワードを照合する方法がわかりません。

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

私はこれがより良い、よりエレガントな方法だと思います:

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

ユーザーインスタンスからダイジェストを生成するもう1つの方法は、保護されたメソッドエラーを生成することでした。

258
joshaidan

Deviseメソッドを使用する

Deviseには、ユーザーのパスワードを検証する組み込みメソッドが用意されています。

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

user.valid_password?(params[:user][:password])

強いパラメータを持つ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
14
Sheharyar

良い方はこれになると思います

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

@joshaidanは本当の答えです

4
Zainal

これをお勧めします。

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