如何在rails视图中打印用户密码

时间:2018-03-13 06:59:25

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

在我的控制器中

@user = User.last

在我看来

<%= @user.password.inspect %>

返回nil值,但如果我正在使用

<%= @user.encrypted_password.inspect %>

显示"$2a$11$LXD0UDB3kvwxqG/w/0icGuy6iXEOFZ264ushzSi6LfXSdAitwPmNO"

如何打印密码而不是加密密码。

2 个答案:

答案 0 :(得分:1)

密码不应该作为纯文本存储在数据库中,并且散列它们的全部意义在于它们非常难以(在计算能力方面)反转。

假设您使用Devise进行身份验证,可以阅读here password方法做什么:

  

根据给定值生成散列密码。由于遗留原因,我们使用encrypted_password来存储哈希密码。

唯一的责任是设置密码,而不是返回任何值。

通过查看schema.rbUser.column_names之类的命令,您可以看到数据库中没有此类列作为密码。

但如果您确实需要将密码存储为纯文本,那么根据此answer,您应该编写自己的encryptor method

如果您只想检查特定密码是否与存储在数据库中的密码相同,那么您可以使用valid_password?

  

验证密码(即登录时)是否为用户密码。

像这样:

@user = User.last 
@user.valid_password?('password')

答案 1 :(得分:0)

以加密形式存储密码的整个概念是维护用户信息的安全性。

此外,您可以使用

进行匹配

Bcrypt计算器:

https://www.dailycred.com/article/bcrypt-calculator

如果您使用的是设计,则可以使用可恢复模块或您编写的自定义逻辑来重置密码。