Rails 3/Devise:密码盐不再被创建?
我一直在使用Devise进行用户认证的一段时间的项目。无论何时创建用户,它都会为它们生成一个密码salt以及它们的加密密码。Rails 3/Devise:密码盐不再被创建?
正如我来到这个项目的尾部,我是测试用户注册,并注意到我的新角色并没有在数据库中创建这些新用户密码盐,而我的老用户都有盐。新用户可以正常登录,但我担心Devise为什么不再创建盐。
当我升级模块并记住日志说删除可加密因为bcrypt现在是默认的加密,或类似的情况下,Devise遇到的唯一不寻常的事情。我这样做......不知道这是否与当前问题有关。另外,也许是因为我的项目已经陷入困境,我从头创建了一个全新的Rails应用程序,并添加了Devise,甚至这个新项目也不会为用户创建盐分。
是否有设计密码盐的新方法,或者没有人知道盐为什么不再被创建?不幸的是,Devise wiki在这方面没有太多的话要说,Google迄今为止一直没有成果。
或者......甚至有必要首先有盐吗?似乎更安全的拥有它们,我想。
我的用户/ devise配置如下。
配置/初始化/ devise.rb
Devise.setup do |config|
config.mailer_sender = "[email protected]"
require 'devise/orm/active_record'
config.authentication_keys = [ :login ]
config.stretches = 10
config.encryptor = :bcrypt
# Setup a pepper to generate the encrypted password.
config.pepper = "79c2bf3b[...]"
end
应用程序/模型/ user.rb
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
UPDATE
我能够找到的通知从Devise升级后,读取...
[DEVISE] From version 1.2, there is no need to set your encryptor to bcrypt since encryptors are only enabled if you include :encryptable in your models. To update your app, please:
1) Remove config.encryptor from your initializer;
2) Add t.encryptable to your old migrations;
3) [Optional] Remove password_salt in a new recent migration. Bcrypt does not require it anymore.
这样看来,如果你坚持使用bcrypt,这也解释了为什么它不能再创建password_salt已被弃用。所以这个答案,但我的问题的其他部分仍然存在......这是一个很好的做法,或者我应该与除了bcrypt之外的另一个加密?
每何塞·Valim:如果您 使用bcrypt
设计1.2.1不需要 password_salt列了。如果您需要盐的种类 ,我相信有一种方法 称为authentication_salt,您可以使用 来检索此类值。 (Source)
色器件的新版本使用的字符0到加密密码字段作为盐的29和在用于加密的密码数据库字段中的剩余的字符。所以你的密码实际上仍然被BCrypt腌制。
关于此主题的一点更新:我正在研究有关此主题的更多信息,显然BCrypt将salt加密为密码,而不是单独的东西。这当然可以解释为什么在Devise中盐柱被抛弃了。 – Shannon 2011-05-13 15:10:00