在我的控制器中
@user = User.last
在我看来
<%= @user.password.inspect %>
返回nil值,但如果我正在使用
<%= @user.encrypted_password.inspect %>
显示"$2a$11$LXD0UDB3kvwxqG/w/0icGuy6iXEOFZ264ushzSi6LfXSdAitwPmNO"
如何打印密码而不是加密密码。
答案 0 :(得分:1)
密码不应该作为纯文本存储在数据库中,并且散列它们的全部意义在于它们非常难以(在计算能力方面)反转。
假设您使用Devise进行身份验证,可以阅读here
password
方法做什么:
根据给定值生成散列密码。由于遗留原因,我们使用
encrypted_password
来存储哈希密码。
唯一的责任是设置密码,而不是返回任何值。
通过查看schema.rb
或User.column_names
之类的命令,您可以看到数据库中没有此类列作为密码。
但如果您确实需要将密码存储为纯文本,那么根据此answer,您应该编写自己的encryptor method
如果您只想检查特定密码是否与存储在数据库中的密码相同,那么您可以使用valid_password?
像这样:验证密码(即登录时)是否为用户密码。
@user = User.last
@user.valid_password?('password')
答案 1 :(得分:0)
以加密形式存储密码的整个概念是维护用户信息的安全性。
此外,您可以使用
进行匹配Bcrypt计算器:
https://www.dailycred.com/article/bcrypt-calculator
如果您使用的是设计,则可以使用可恢复模块或您编写的自定义逻辑来重置密码。