2011-04-09 78 views
23

我一直在使用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之外的另一个加密?

+0

关于此主题的一点更新:我正在研究有关此主题的更多信息,显然BCrypt将salt加密为密码,而不是单独的东西。这当然可以解释为什么在Devise中盐柱被抛弃了。 – Shannon 2011-05-13 15:10:00

回答

15

每何塞·Valim:如果您 使用bcrypt

设计1.2.1不需要 password_salt列了。如果您需要盐的种类 ,我相信有一种方法 称为authentication_salt,您可以使用 来检索此类值。 (Source)

+0

嘿,你回答了我上面提到的更新的同一时间,但答案完全相同。 ;)如果是这种情况,认为坚持bcrypt是可以的吗? – Shannon 2011-04-09 20:17:48

+0

我以为盐总是很重要,但我不是安全专家。 [这个答案](http://stackoverflow.com/questions/3722780/do-any-security-experts-recommend-bcrypt-for-password-storage/3724617)可能会有所帮助。 – Zabba 2011-04-09 20:21:03

29

色器件的新版本使用的字符0到加密密码字段作为盐的29和在用于加密的密码数据库字段中的剩余的字符。所以你的密码实际上仍然被BCrypt腌制。