mysql Rails3.1查询使用attr_encrypted gem加密的数据库(加密列上的where子句)

jgovgodb  于 2023-04-10  发布在  Mysql
关注(0)|答案(2)|浏览(90)

我已经使用attr_encrypted gem加密了表中的一个字段。现在我想查询这个特定的列,并将它与我从表单中检索的值进行比较。我如何才能做到这一点?

EDIT:我需要查询一些加密列,例如:搜索encrypted_emailencrypted_name等(在where子句中使用OR条件)

hjqgdpho

hjqgdpho1#

attr_encrypted拦截find_by方法,所以你应该能够做到这一点:

class User < ActiveRecord::Base
  attr_encrypted :email, :key => 'a secret key'
  attr_encrypted :password, :key => 'some other secret key'
end

User.find_by_email_and_password('test@example.com', 'testing')

这被重写为

User.find_by_encrypted_email_and_encrypted_password('ENCRYPTED EMAIL', 'ENCRYPTED PASSWORD')
qrjkbowd

qrjkbowd2#

class User < ActiveRecord::Base 
  attr_encrypted :email, :key => 'a secret key'
end

如果你想写一个查询来检索电子邮件为'abc@xyz.com'的用户,那么你可以这样做

User.where(encrypted_email: User.encrypt_email('abc@xyz.com'))

User.scoped_by_email('abc@xyz.com') # works only for dynamic scope methods

相关问题