Rails 3.1使用attr_encrypted gem(加密字段的where子句)加密数据库

时间:2012-01-16 04:13:15

标签: mysql ruby-on-rails ruby-on-rails-3

我使用attr_encrypted gem加密了表中的字段。现在我想查询该特定字段,将其与我从表单中检索的值进行比较。我怎么能这样做?

编辑:我需要查询多个加密字段。例如:搜索encrypted_email,encrypted_name等(在where子句中使用OR条件)

2 个答案:

答案 0 :(得分:3)

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')

答案 1 :(得分:2)

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

如果您要编写查询以检索其电子邮件为&#39; 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