我想测试一个使用attr_encrypted加密数据库中的秘密的模型
class Thing
attr_encrypted :secret, encode: true
end
但是当我在夹具中定义秘密时,编码的换行符被转义了。
one:
encrypted_secret: '<%= Thing.encrypt_secret(SecureRandom.uuid) %>'
那是:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
在数据库中存储为:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC
m6qD'
这样做的问题是这会失败:
thing = things(:one)
assert_equal thing, Thing.find_by_secret(thing.secret)
Thing.find_by_secret(thing.secret) 返回 nil,因为生成的 SQL 查询尝试匹配加密密钥的两个版本并且未能获得匹配。
我努力了:
one:
encrypted_secret: 'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
但得到相同的结果。
如何配置我的灯具以使用 attr_encrypted?