【发布时间】:2016-10-09 14:09:39
【问题描述】:
嗨,我是 Rails 中 Bcrypt 的新手,我想知道如何正确使用这个 gem,到目前为止,我能够对密码进行哈希处理,但是当将其与用户输入的密码进行比较时,它不匹配。
这是我的加密和登录代码。
def self.login(user)
hashed_password = encrypt_password(user["password"])
result = User.where({:username => user["username"], :password => hashed_password})
return result
end
def self.add_user(user)
hashed_password = encrypt_password(user["password"])
result = User.create({:username => user["username"],
:password => hashed_password,
:firstname => user["firstname"],
:middle_initial => user["middle_initial"],
:lastname => user["lastname"],
:advisory_class => user["advisory_class"]})
return result
end
def self.encrypt_password(password)
password_salt = BCrypt::Engine.generate_salt
password_hash = BCrypt::Engine.hash_secret(password,password_salt)
end
在 add_user 中,我在使用 login 功能登录时使用 encrypt_password 功能对其进行加密。密码与数据库中加密的密码不匹配。我确定我没有以正确的方式这样做,你能指出我在哪里做错了吗?谢谢。
【问题讨论】:
-
请注意,在
x({...})形式的调用中可以省略散列括号,因为它们在 Ruby 中是隐含的。例如:User.create(:username => user['username'], ...)甚至更好的User.create(username: user['username'], ...)使用现代哈希表示法。 -
感谢您的留言,但这不是我现在最关心的问题。
标签: ruby-on-rails ruby bcrypt