過去 2 時間、ログインできないという、devise の奇妙な問題をデバッグしようとしていました。
私が言及している内容は次のとおりです。
password
=> 'vinodsobale'
password == 'vinodsobale'
=> true
resource.valid_password?(password)
=> false
resource.valid_password?('vinodsobale')
=> true
スクリーンショットも添付します:
注: デバイス内でデバッガーを有効にしたので、上記のコードはデバイスの内部コードです。
私にとっては、これは の問題のように見えますDevise.secure_compare
。
ベストアンサー1
この問題は、Ruby 2.2.0の既知の文字列破損バグが原因で、修理済み2.2.2 で。
で説明したようにバグレポート破損はBCryptがC拡張から特定の文字列作成APIを呼び出したときに発生し、Devise v3.3.0::BCrypt::Engine.hash_secret
はDevise::Models::DatabaseAuthenticatable#valid_password?
方法。デバイス固有の回避策このバグに対する修正は v3.5.0 で公開されました。
解決策は次のいずれかです。
- Ruby を にダウングレードする
< 2.2.0
か、 にアップグレードします>= 2.2.2
。 - Devise を にアップグレードします
>= 3.5.0
。