2011-04-09 8 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醃製。