Reg*_*ieB 5 activerecord ruby-on-rails fixtures minitest attr-encrypted
我想测试一个使用attr_encrypted加密数据库中的秘密的模型
class Thing
attr_encrypted :secret, encode: true
end
Run Code Online (Sandbox Code Playgroud)
但是当我在灯具中定义秘密时,编码的换行符会被转义出来.
one:
encrypted_secret: '<%= Thing.encrypt_secret(SecureRandom.uuid) %>'
Run Code Online (Sandbox Code Playgroud)
那是:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
Run Code Online (Sandbox Code Playgroud)
存储在数据库中:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC
m6qD'
Run Code Online (Sandbox Code Playgroud)
这样做的问题是失败了:
thing = things(:one)
assert_equal thing, Thing.find_by_secret(thing.secret)
Run Code Online (Sandbox Code Playgroud)
Thing.find_by_secret(thing.secret)返回nil,因为生成的SQL查询尝试匹配加密机密的两个版本并且无法获得匹配.
我试过了:
one:
encrypted_secret: 'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
Run Code Online (Sandbox Code Playgroud)
但得到相同的结果.
如何配置我的灯具以使用attr_encrypted?
有效的解决方案是将所有 '\n' 替换为 '\\n' 并使用双引号。这有效:
one:
encryped_secret: "<%= Thing.encrypt_secret(SecureRandom.uuid).gsub(/\n/, '\\\\n') %>"
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来做到这一点?
归档时间: |
|
查看次数: |
597 次 |
最近记录: |