设计:密码和:encrypted_pa​​ssword

时间:2016-02-06 11:03:25

标签: ruby-on-rails ruby devise

设计 rails gem中,这两者有什么区别?

我在生成的架构中看到了:encrypted_password字段,但没有看到:password字段。

如果这两者相互联系,是否有任何解释?

3 个答案:

答案 0 :(得分:4)

Devise::Models::DatabaseAuthenticatable有一个设置器:

def password=(new_password)
  @password = new_password
  self.encrypted_password = password_digest(@password) if @password.present?
end

因此,您应该将密码设置为有password字段,设计将负责加密。

正如@spickermann已经指出的那样 - 纯文本密码永远不应该存储在任何地方,并且应该从日志/错误消息等过滤掉,因为这会产生巨大的安全风险:加密密码泄漏并非完全无害,但不是危险那么多。

答案 1 :(得分:2)

password是用户设置为密码的纯文本(纯文本密码不应存储在任何地方)。 encrypted_password这个密码的加密版本。

您可能需要阅读SecurePassword

答案 2 :(得分:0)

:encrypted_password是用户通过表单设置的密码。

:encrypted_password是存储在数据库中并检索以创建用户会话的内容。

基本上,:passwordaBN1的散列和加盐版本,可以安全地存储在您的数据库中。如果您需要有关不应将纯文本密码存储在数据库中的原因的详细信息,请参阅this answer