使用典型的 Rails 4.1 应用程序has_secure_password
和User
模型password_digest
在数据库中有一个列。当我创建一个新用户时,我仍然可以在控制台中访问明文密码:
# in rails console
> u = User.new(email: "test@test.com", password: "password")
> u.save
> u.password => "password"
> u.password_digest => "xjdk..."
但是,当我关闭控制台会话并开始新的会话时,我无法再检索明文密码:
# close above console session and open a new one
> u = User.find_by(email: "test@test.com")
> u.password => nil
我假设明文密码只能在第一种情况下检索,因为它存储在内存中,当我调用u.password => "password"
它时,它是从内存中检索值,而不是从数据库中检索值。
我一直认为has_secure_password
将(盐+密码)存储为哈希,我认为这意味着理论上不可能(如果我可以使用该术语)反转password_digest
并获取原始密码。
我只是确保我假设密码存储为真正的哈希(即无法检索原始密码)是有效的。我已经阅读了Rails has_secure_password API,但它没有澄清我的问题。