覆盖where-Rails 5.1的属性值

时间:2018-01-31 17:29:17

标签: ruby-on-rails ruby activerecord

您好我需要在我自己的实现和查询User.where(:password => 'password')中做Devise,但密码是加密和加密的。什么是"铁路"覆盖这种行为的方式?我尝试使用attr_writter

def password=(pass)
   super(hashpassword(pass))
end

但没有成功,我仍然看到SELECT 'users'.* FROM 'users' WHERE 'users'.'password' = 'non-salted-password' LIMIT 11

有什么建议吗?谢谢。

重要

我没有使用设计。

关于解决方案

批准的解决方案是使用本地"身份验证"方法,我不得不将数据库中的密码字段更改为password_digest,并且有效。

1 个答案:

答案 0 :(得分:2)

可以使用authenticate方法。这适用于has_secure_password

authenticate的用法如下:

user = User.new(password: 'hash-of-the-password')
user.save
user.authenticate('not-the-password')      # => false
user.authenticate('password') # => user

has_secure_password需要一个名为password_digest的列(尽管您可能会覆盖此列),在有人注册密码/密码确认后会填充哈希值。

希望有所帮助 - 如果您需要更多信息或有任何疑问,请与我联系。