ユーザーのパスワードをデータベースで直接リセットしたいと考えています。パスワードは通常、暗号化されたハッシュとして保存されていることがわかります。どのような選択肢がありますか?
私はDeviseを使っています。
ユーザーのパスワードをデータベースで直接リセットしたいと考えています。パスワードは通常、暗号化されたハッシュとして保存されていることがわかります。どのような選択肢がありますか?
私はDeviseを使っています。
「データベースに直接」と言ったことに気付きました。次に、最初のコメントが最も効果的です。
レールを介して(たとえば、移行で)まだ実行できる場合は、これを試すことができます:
user = User.find(...)
# set plain text password, it will run 'encrypted_password=' under the hood
user.password = "new password"
user.save
その後、ケースに応じて、電子メール通知を送信するか、authentication_token をリセットすることができます。
@ cjm2671、短い答えはノーであり、すべきではありません。https://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb#L4でDeviseがどのようにそれを行うかを参照してください
# Verifies whether an password (ie from sign in) is the user password.
def valid_password?(password)
return false if encrypted_password.blank?
bcrypt = ::BCrypt::Password.new(encrypted_password)
password = ::BCrypt::Engine.hash_secret("#{password}#{self.class.pepper}", bcrypt.salt)
Devise.secure_compare(password, encrypted_password)
end
なぜDBで直接やりたいのですか?
必要に応じて、データベースの BCrypt (PostgreSQL の場合は pgcrypto など) と の値が必要になりますself.class.peper
。私はbcrypt.salt
BCryptによって提供されると仮定しています。
アップデート:
私は疑い始めています.pgcryptoにすぐにジャンプしますが、それはあなたが望むことをしていないようです.