とにかく、デバイス外の別のサービスからパスワードを変更できるようにするメソッドを実装しようとしています。
# Profile password change
def change_password(oldpass, newpass)
pepper = nil
cost = 10
# Encrypt plain text passwords
encrypt_old = ::BCrypt::Password.create("#{oldpass}#{pepper}", :cost => cost).to_s
# Validate old
if self.encrypted_password == encrypt_old
encrypt_new = ::BCrypt::Password.create("#{newpass}#{pepper}", :cost => cost).to_s
self.encrypted_password = encrypt_new
self.save
else
Logger.new("Wrong old password!")
end
end
パスワードの暗号化が間違っているようです。oldpassには古いパスワードのプレーンテキストが含まれています。ハッシュして現在のパスワードと一致するかどうかを確認してから、新しいパスワードを保存できるようにする必要があります。しかし、私が得ているのは間違ったパスワードだけです。
作り直し:
def change_password(oldpass, newpass)
if valid_password?(oldpass)
password = newpass
save
return true
else
return false
end
end