我正在使用the attr_encrypted gem,我也在我的环境中安装了设备。
我有一个用户模型,这是由devise处理的,数据库列是: 的 encrypted_password
用户可以保存客户端,我希望使用用户密码加密客户端名称和年龄。
我的 client.rb 文件如下所示: 这里数据成功加密。
class Client < ActiveRecord::Base
attr_accessor :name :age
attr_encrypted :name, :age, key: "test1234"
但我想用Users.password加密数据。 像这样:
class Client < ActiveRecord::Base
attr_accessor :name :age
attr_encrypted :name, :age, key: current_user.encrypted_password
current_user是Devise帮助器方法,但由于这是来自会话,因此我无法在模型中访问它。 基本上我想用用户密码加密所有客户端的东西。 但如果我使用encrypted_password执行此操作,那么我已经获得了解密整个字段的密码。 我想为用户提供安全保障,但我不想知道或无法查看他们的数据。 因此,唯一的方法是使用预先设定的用户密码加密所有数据?
编辑:
user.encrypted_password已经过哈希处理,每当我访问数据库时 - 我可以使用它来解密所有数据吗?
所以我应该要求用户密码 - &gt;像设计一样哈希 - 将它与users.encrypted_password进行比较?
我在某处有逻辑错误吗?
你会如何解决这个问题?
答案 0 :(得分:0)
attr_encrypted提供了一种指定实例方法来提供密钥的方法。
class Client < ActiveRecord::Base
attr_encrypted :name, :age, key: :client_key
def client_key
# just assuming relation between Client and User
self.user.encrypted_password
end
end
来源:https://github.com/attr-encrypted/attr_encrypted#symbols-representing-instance-methods-as-keys
答案 1 :(得分:0)
当您使用Devise时,它使用bcrypt算法来加密您的密码,这是一种加密方式
即这个过程不可逆,没有办法从散列回到密码。 所以你可以使用那个哈希来加密整个数据。
但我的建议是你使用bcrypt算法来加密你的数据而不是使用用户密码,为什么我建议bcrypt而不是使用你的密码哈希来加密你的数据