2011-12-16 17 views
3

您可以重現該問題如下:Attr_encrypted爲了

git clone -b args_order git://github.com/danpal/attr_encrypted.git 
cd attr_encrypted/ 
rake test 

1) Error: 
test_should_create_an_account_regardless_of_arguments_order(ActiveRecordTest): 
ArgumentError: must specify a :key 

這裏是一個測試:

def test_should_create_an_account_regardless_of_arguments_order 
    Account.create!(:key => "secret", :password => "password") 
    Account.create!(:password => "password" , :key => "secret") 
end 

問題是屬性組的左 - >右:密碼取決於:鍵所以當:密碼是之前:鍵,鍵是零。

這是爲什麼這取決於:

class Account < ActiveRecord::Base 
    attr_accessor :key 
    attr_encrypted :password, :key => Proc.new {|account| account.key} 
end 

因此,如果之前沒有設置account.key:設置密碼的東西打破。

現在我每次加密值應該被設置爲加密的屬性值:

define_method("#{attribute}=") do |value| 
    ..... 
    send("#{encrypted_attribute_name}=", encrypt(attribute, value)) <---HERE GETS ENCRYPTED 
    instance_variable_set("@#{attribute}", value) 
end 

我想保存到數據庫時也許只是加密屬性,但問題可能有許多加密屬性,也有些人可能會在保存之前使用加密屬性。我能做些什麼來防止這種情況發生?任何人都關心添加拉請求?

+0

我遇到了同樣的問題。你有沒有解決? – maletor 2012-04-15 05:43:54

回答

2

我修改我的模型來處理這個:

attr_encrypted:SSN,:鍵=> Rails.env.test? ? 'ssn_secret':ENV ['SSN_SECRET']