如何在设计模型上插入已加密的密码?

时间:2016-07-21 06:42:31

标签: ruby-on-rails csv encryption devise

我是铁杆的新手。我想问一下是否可以插入加密密码(使用设计默认加密加密)来设计模型?

例如:

  User.csv

      id,name,encrypted_password
      1,dude,$2a$10$0.xEu5LvDbnmGVIqgIab8ej5o2b3eKa8KLevsg5bxIX0SHSOl5gye

我想阅读此csv文件,然后将数据插入用户模型。 但我意识到您无法在用户模型的encrypted_password上正常插入已加密的密码。我想解密密码,但他们说这对系统的安全性有害。

更新:它现在可以插入加密密码,但插入的密码与csv上的密码不同,因为设计会在将密码插入数据库之前自动加密密码。设计模型是否有办法在将密码插入数据库之前检测密码是否已加密?

1 个答案:

答案 0 :(得分:0)

是的,您可以直接设置encrypted_pa​​ssword值:

u = User.find(1)
u.update_attribute(:encrypted_password, "$2a$10$0.xEu5LvDbnmGVIqgIab8ej5o2b3eKa8KLevsg5bxIX0SHSOl5gye")

但是你应该确保你没有设置'密码',如果这样做不会起作用,因为它会再次加密,所以

u = User.new
u.password = 'foo'
u.password_confirmation = 'foo'
u.encrypted_password = "$2a$10$0.xEu5LvDbnmGVIqgIab8ej5o2b3eKa8KLevsg5bxIX0SHSOl5gye" # this line will be ignored
u.save


u = User.new
u.encrypted_password = "$2a$10$0.xEu5LvDbnmGVIqgIab8ej5o2b3eKa8KLevsg5bxIX0SHSOl5gye" # this line will now work
u.save