在设计 rails gem中,这两者有什么区别?
我在生成的架构中看到了:encrypted_password
字段,但没有看到:password
字段。
如果这两者相互联系,是否有任何解释?
答案 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
是存储在数据库中并检索以创建用户会话的内容。
基本上,:password
是aBN1
的散列和加盐版本,可以安全地存储在您的数据库中。如果您需要有关不应将纯文本密码存储在数据库中的原因的详细信息,请参阅this answer。