使用 Bcrypt 的正确做法
Correct practice for using Bcrypt
This guide shows how to use Bcrypt with Rails, but it differs significantly in implementation from this Rails documentation on Bcrypt.
引导版
设置密码
def password=(password)
self.password_digest = BCrypt::Password.create(password)
end
验证密码
def is_password?(password)
BCrypt::Password.new(self.password_digest) == password
end
但是文档使用内置方法做同样的事情。
文档版本
设置密码
设置 user.password
或同时设置 user.password
和 user.password_confirmation
值,然后调用 user.save
将调用 Bcrypt 的一些回调,这些回调将获取密码值并生成摘要并将其保存在数据库中。
user.password = 'mUc3m00RsqyRe'
user.password_confirmation = 'mUc3m00RsqyRe'
user.save
验证密码
方法 user.authenticate(password)
将 return false 或 user
的实例变量取决于密码参数是否匹配 user.password_digest
.
user.authenticate('notright')
user.authenticate('mUc3m00RsqyRe')
问题
我一直使用文档版本,因为我第一次看到它,但是指南是否遵循了一些更好的做法?
为什么向导要重写轮子?这看起来很不-Railsy.
这只是 Bcrypt 或 Rails 版本的差异吗?
正确的方法是使用自 Rails 3 以来可用的 has_secure_password
(记录的方法)。也许该指南基于 Rails 3 之前的实践?
This guide shows how to use Bcrypt with Rails, but it differs significantly in implementation from this Rails documentation on Bcrypt.
引导版
设置密码
def password=(password)
self.password_digest = BCrypt::Password.create(password)
end
验证密码
def is_password?(password)
BCrypt::Password.new(self.password_digest) == password
end
但是文档使用内置方法做同样的事情。
文档版本
设置密码
设置 user.password
或同时设置 user.password
和 user.password_confirmation
值,然后调用 user.save
将调用 Bcrypt 的一些回调,这些回调将获取密码值并生成摘要并将其保存在数据库中。
user.password = 'mUc3m00RsqyRe'
user.password_confirmation = 'mUc3m00RsqyRe'
user.save
验证密码
方法 user.authenticate(password)
将 return false 或 user
的实例变量取决于密码参数是否匹配 user.password_digest
.
user.authenticate('notright')
user.authenticate('mUc3m00RsqyRe')
问题
我一直使用文档版本,因为我第一次看到它,但是指南是否遵循了一些更好的做法?
为什么向导要重写轮子?这看起来很不-Railsy.
这只是 Bcrypt 或 Rails 版本的差异吗?
正确的方法是使用自 Rails 3 以来可用的 has_secure_password
(记录的方法)。也许该指南基于 Rails 3 之前的实践?