Ruby on rails Rails 3/设计:不再创建密码?

Ruby on rails Rails 3/设计:不再创建密码?,ruby-on-rails,authentication,encryption,devise,salt,Ruby On Rails,Authentication,Encryption,Devise,Salt,我已经在一个项目上工作了一段时间,该项目使用Desive进行用户身份验证。无论何时创建用户,它都会为他们生成一个密码以及加密的密码 当我即将结束这个项目时,我正在测试用户注册,并注意到我的新角色没有在数据库中为这些新用户创建密码salt,而我的老用户都有salt。新用户可以很好地登录,但我担心Desive为什么不再生产盐了 我遇到的Desive唯一的奇怪之处是在升级模块时,还记得日志中说要删除encryptable,因为bcrypt现在是默认加密,或者类似的东西。我这样做了…不确定这是否与当前问

我已经在一个项目上工作了一段时间,该项目使用Desive进行用户身份验证。无论何时创建用户,它都会为他们生成一个密码以及加密的密码

当我即将结束这个项目时,我正在测试用户注册,并注意到我的新角色没有在数据库中为这些新用户创建密码salt,而我的老用户都有salt。新用户可以很好地登录,但我担心Desive为什么不再生产盐了

我遇到的Desive唯一的奇怪之处是在升级模块时,还记得日志中说要删除encryptable,因为bcrypt现在是默认加密,或者类似的东西。我这样做了…不确定这是否与当前问题有关

此外,考虑到可能是我的项目失败了,我从零开始创建了一个全新的Rails应用程序,并在其中添加了Desive,即使是这个新项目也没有为用户创造盐

在Desive中是否有一种新的方法来设置密码盐,或者有人知道为什么不再创建密码盐了吗?不幸的是,Desive wiki在这个问题上没有太多的话要说,谷歌到目前为止一直是一个毫无结果的搜索

或者…一开始就需要盐吗?我想,拥有它们似乎更安全

我的用户/设备配置如下

config/initializers/designe.rb

Devise.setup do |config|

  config.mailer_sender = "mail@domain.com"

  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
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
app/models/user.rb

Devise.setup do |config|

  config.mailer_sender = "mail@domain.com"

  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
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
更新

我能在设备升级后找到通知,上面写着

[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,则密码_salt似乎不受欢迎,这解释了为什么不再创建它。这就回答了这个问题,但我问题的另一部分仍然存在……这是一种足够好的做法,还是我应该使用bcrypt之外的另一种加密?

佩尔·何塞·瓦利姆:

设计1.2.1不要求 密码\u盐栏,如果您 正在使用bcrypt。如果你需要一种 关于盐,我相信有一种方法 你可以把它叫做盐 用于检索此类值。


新版本的Deviate使用加密密码字段中的0到29个字符作为salt,并使用该数据库字段中的其余字符作为加密密码。所以你的密码实际上还是用BCrypt加了盐。

Heh,你的回答和我在上面更新的时候一样,但答案都一样。;)如果是这样的话,你认为继续使用bcrypt是可以的吗?我本以为盐总是很重要的,但我不是安全专家。可能会对你有所帮助。关于这个主题的一点更新:我正在研究关于这个主题的更多信息,显然BCrypt将salt加密到密码中,而不是一个单独的东西。这当然可以解释为什么Desive中的盐柱被丢弃了。