2012-01-16 51 views
6

私は、attr_encrypted gemを使用してテーブル内のフィールドを暗号化しました。今私はフォームから取得している値とその特定のフィールドを照会する必要があります。これどうやってするの?Rails 3.1 attr_encrypted gem(暗号化フィールドのwhere句)で暗号化されたデータベースの照合

EDIT:暗号化されたフィールドの数を照会する必要があります。例えば:あなたがこれを行うことができる必要がありますので

答えて

3

attr_encryptedインターセプトfind_by方法は、(where句で使用してOR条件)encrypted_nameなど、encrypted_emailに検索:

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('[email protected]', 'testing') 

これは

User.find_by_encrypted_email_and_encrypted_password('ENCRYPTED EMAIL', 'ENCRYPTED PASSWORD') 
に書き換えます
+0

? – phoenixwizard

+0

ActiveRecordの[dynamic finders](http://api.rubyonrails.org/classes/ActiveRecord/Base.html)の概念に精通していますか? –

+0

はい私はそれに精通していますが、私は "または"条件に使用していません。私はそれが "と"のためだけに使用できると思います。私が間違っているなら、私を訂正してください。 – phoenixwizard

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

電子メールが「[email protected]」のユーザーを取得するクエリを作成する場合は、

012私は、電子メールや年齢や名前で検索すると、すべての3が暗号化されていることを言いたい場合はどう
User.where(encrypted_email: User.encrypt_email('[email protected]')) 

または

User.scoped_by_email('[email protected]') # works only for dynamic scope methods 
+0

'per_attribute_iv_and_salt'モードを実行している場合、' encrypt_email'属性メソッドのwhereスコープを使用した検索は機能しますか? – richsinn

+0

@ richsinn私はそのように試みていません。しかし、あなたはショットを与えることができます:) – vitthal

関連する問題