9870


DeviseでUser管理をしています。保存されたパスワードはencrypted_passwordとして暗号化されて保存されています。  
Deviseのログイン画面とは別にDeviseを使わないログイン画面を作る必要が出てきました。

パラメータから受け取ったparams[:password]と既にDeviseのsign_upから登録済のUserのencrypted_passwordが同値であるか（ログインが許可できるか？）はどう判断すればいいのでしょうか？


CC BY-SA 3.0
2015-05-06T13:24:05.893
9861
2015-05-06T21:58:10.987
9202
question
ruby-on-rails ruby rails-activerecord rubygems
Deviseで保存されたUserの暗号化パスワードと入力パスワードの同値確認方法は？


Devise
の設定によって色々と方法が異なりますが、デフォルトの設定であると仮定すると、以下のようなコードで同値であるかどうか判定できます。クラス名や文字列の部分は、適切なものに変えてください。

test.rb

[code]

    require "rubygems"
    require "active_model"
    
    class User
      include ActiveModel::SecurePassword
      has_secure_password
      attr_accessor :password_digest
    end
    
    a = User.new
    a.password_digest = "User#encrypted_password の値を入れてください"
    
    if a.authenticate "入力されたパスワードを入れてください"
      puts "success"
    else
      puts "fail"
    end
    
[/code]

実行結果

[code]

    $ ruby test.rb
    success
    
[/code]


CC BY-SA 3.0
2015-05-06T16:30:16.340
9867
2015-05-06T16:30:16.340
9508
9861
answer


`valid_password?`メソッドを使ってください。  
以下は実行例です。

[code]

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

参考: <https://stackoverflow.com/questions/4320921/how-verify-user-password-in-
devise>


CC BY-SA 3.0
2015-05-06T21:58:10.987
9870
2015-05-06T21:58:10.987
2017-05-23T12:38:55.250
-1
85
9861
answer