Чтобы безопасно хранить пароли моего пользователя, я пытаюсь использовать BCrypt в своем приложении Sinatra/Ruby.Сравнение паролей Ruby BCrypt возвращает неверную оценку
Следующий код моей модели пользователя.
require 'mongo_mapper'
require 'bcrypt'
# User model
class User
include MongoMapper::Document
include BCrypt
key :email, String, length: 6..50, unique: true
key :password, String
key :password_hash, String
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
def self.authenticate(requested_email, requested_password)
u = self.find_by_email(requested_email)
u if u && u.password_hash == requested_password
end
end
# Test user account
if User.count == 0
user = User.new(email: "[email protected]")
user.password = "admin"
user.save
end
Когда я вызываю метод Аутентифицировать так: User.authenticate("[email protected]", "admin")
, код возвращает ложь. Я уверен, что пользователь существует.
EDIT: u.password == requested_password
возвращает ложь, а
Почему это происходит, даже когда значение передается метода являются действительными и правильными?