我有一个使用 brcypt gem 加密的用户模型。
但是,当我使用以下代码时,它会返回 false 作为结果。
User.find(117).try(:authenticate ,User.find(117).password_digest)
但下面提到的命令工作正常:
User.find(117).try(:authenticate ,"password")
它返回真。
那么当我需要验证已经存储在数据库中的密码时,如何实现第一个条件。
任何帮助,将不胜感激!!
我有一个使用 brcypt gem 加密的用户模型。
但是,当我使用以下代码时,它会返回 false 作为结果。
User.find(117).try(:authenticate ,User.find(117).password_digest)
但下面提到的命令工作正常:
User.find(117).try(:authenticate ,"password")
它返回真。
那么当我需要验证已经存储在数据库中的密码时,如何实现第一个条件。
任何帮助,将不胜感激!!
请尝试以下方法:
User.find(117).try(:authenticate ,User.find(117).password)
您永远不会直接在用户上调用 password_digest。
password_digest
仅在设置数据库中的字段和视图中表单上的类型时使用。
对于所有其他目的,调用用户的“.password”属性。
在您的第一行中,您传递了摘要密码,该密码(取决于您的实现或您使用的 gem)应该是原始密码的单向加密字符串。如果没有原始密码,您将无法验证此摘要。
虽然try
是一件很棒的事情,但它隐藏了您可能遇到的所有有用错误。如果您分开查找用户和验证密码,您的代码会更好。