我已经在一个项目上工作了一段时间,该项目使用 Devise 进行用户身份验证。每当创建用户时,它都会为他们生成密码盐及其加密密码。
当我进入这个项目的尾声时,我正在测试用户注册,并注意到我的新角色没有在数据库中为这些新用户创建密码盐,而我的旧用户都有盐。新用户可以正常登录,但我担心为什么 Devise 不再创建盐。
我遇到的 Devise 唯一的奇怪之处是当我升级模块时,并记得日志中提到删除可加密的内容,因为 bcrypt 现在是默认加密,或者类似的内容。我这样做了......不确定这是否与当前问题有关。
另外,考虑到可能是我的项目被盗了,我从头开始创建了一个全新的 Rails 应用程序,并向其中添加了 Devise,甚至这个新项目也没有为用户创建盐。
Devise 中是否有一种设置密码盐的新方法,或者有人知道为什么不再创建盐?不幸的是,Devise wiki 在这个主题上没有太多可说的,而且到目前为止,谷歌搜索一直没有结果。
或者...是否有必要首先添加盐?我认为拥有它们似乎更安全。
我的用户/设备配置如下。
配置/初始化器/devise.rb
Devise.setup do |config|
config.mailer_sender = "[email protected] /cdn-cgi/l/email-protection"
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 之外的另一种加密?