0

本指南展示了如何将 Bcrypt 与 Rails 一起使用,但它在实现上与关于 Bcrypt的Rails 文档有很大不同。


指南版

设置密码

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.passworduser.password_confirmation值,然后调用user.save将调用 Bcrypt 的一些回调,这些回调将获取密码值并生成摘要并将其保存在数据库中。

user.password = 'mUc3m00RsqyRe' 
user.password_confirmation = 'mUc3m00RsqyRe' 
user.save 

验证密码

该方法user.authenticate(password)user根据密码参数是否匹配返回 false 或实例变量user.password_digest

user.authenticate('notright')
user.authenticate('mUc3m00RsqyRe')

问题

  • 自从我第一次看到它以来,我一直使用文档版本,但是该指南是否遵循了一些更好的做法?

  • 导游为什么要改写轮子?这似乎很不赖西。

  • 这只是 Bcrypt 或 Rails 版本的不同吗?

4

1 回答 1

1

正确的方法是使用has_secure_password自 Rails 3 以来可用的(记录的方法)。也许该指南基于 Rails 3 之前的实践?

于 2016-04-30T06:35:01.653 回答