has_secure_password: 未定义局部变量或方法 'password_digest' 错误

has_secure_password: undefined local variable or method 'password_digest' error

根据标题,当我尝试对我的用户调用以下代码段时 object:

user = User.find_by(Username: username).try(:authenticate, password)

我收到错误:

NameError (undefined local variable or method 'password_digest' for #...)

我走过的步数

我的研究让我想到了这个问题:cant use has_secure_password, password_digest error

我可以探索哪些其他选项来实现此功能?

authenticate方法中,像这样比较数据库PasswordDigest字段来验证密码:

passwordDigest == Digest::SHA1.hexdigest(password)

要点:就是Digest::SHA1.hexdigest,它会把你的普通字符串转换成hex存储在数据库中的字符串。

require 'digest/sha1'
Digest::SHA1.hexdigest("hello world")
=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

您的问题的快速解决方法(如果您无法在数据库中将 PasswordDigest 更改为 password_digest)是为此属性创建外观方法。

如果您查看 has_secure_password source code,您可以看到使用 password_digest 的位置。

所以您的外观属性看起来像这样:

def password_digest=(astring)
  self['PasswordDigest']= astring
end

def password_digest
  self['PasswordDigest']
end

不确定这是否足以涵盖所有内容,但这是一个开始。

否则更改您的数据库字段名!!