web-dev-qa-db-ja.com

devise valid_passwordの奇妙な問題?

過去2時間、私はログインできないdeviseの奇妙な問題をデバッグしようとしています。

これも私が言及しているものです:

password 
=> 'vinodsobale'

password == 'vinodsobale'
=> true

resource.valid_password?(password)

=> false

resource.valid_password?('vinodsobale')

=> true

スクリーンショットも添付:

enter image description here 注:devise内でデバッガーを有効にしたので、上記のコードはdevise内部コードです。

私には、Devise.secure_compareの問題のようです。

78
Viren

Devise DatabaseAuthenticatable#valid_password?Encryptor::compareと呼ばれるメソッドを使用しています。これには2つのオブジェクトが必要です。現在保存されているパスワードと比較する新しいパスワードです。このメソッドには2番目のパラメーターを変更する副作用があると思います途中で2回変更するのではなくオブジェクトを変更するため、誤った結果が発生するため、重複したパスワードオブジェクトを渡した場合に機能する可能性があります。 valid_password? password.dupを使ってみませんか

0
Emad Elsaid

いかがですか

resource.valid_password?(password.to_s)

皆さんのお役に立てば幸いです。

元のソースとコンソールの間のエンコーディングに問題がある可能性があります。 password.codepointsを実行すると、実際のエンコーディングを確認できるはずです。生の「パスワード」文字列で.codepointsを実行すると、[112, 97, 115, 115, 119, 111, 114, 100]が返されます。

0
Torrey Payne