2014-01-23 54 views
2

我讀敏捷Web開發與鋼軌4密碼最少6個字符不起作用[導軌4]

用戶模型中我有不能小於6位字符密碼驗證

validates :password_digest, length: {minimum: 6} 

但實際上,當我創建一個新用戶時,它允許我用低於6的值來完成它。任何建議?

感謝

+0

您驗證password_digest而不是密碼嗎? – PriteshJ

+0

是否有可能在驗證之前散列密碼? – Jite

回答

3

簡而言之 - 您正在驗證錯誤的字段。將password_digest替換爲:password。

validates :password, length: { minimum: 6 } 

這裏的時間長一點的解釋: 我已經打開了一本書,看着第14章(命名爲「任務我:登錄」)。 看起來你的用戶表有列'name','password_digest'和'salt'。 書中的示例描述瞭如何對密碼進行哈希處理,將其與鹽混合並將結果存儲在數據庫中。重點是 - 即使您從一個字母生成此密碼,您的'password_digest'將足夠長。你可以在irb中自己嘗試:

require 'digest' 
Digest::SHA2.hexdigest('a') #=> "ca978112ca1bbdcafac231b39a2..." 

所以,你不應該驗證哈希密碼的長度。相反,你應該驗證'密碼'屬性本身。

+0

這是真的感謝這個詳細的答案,我很困惑,因爲在表中我有password_digest。 – Moh

+0

沒什麼大不了的。我也是通過這本書學習Rails的。如果你喜歡,我們可以交換聯繫人。 – marvelousNinja

+0

這是一本很棒的書,是的,它確實可以在這裏發送下午嗎?還有一個Skype羣組,他們在RoR上用黃瓜和rspec工作,如果你想我可以給你聯繫 – Moh

2

加密

你確認password_digest - 這表明它是加密的密碼?

正如在評論中提到的,除非你的表單輸入將被稱爲password_digest,很可能會被散列前進行驗證,使這個值總是超過6個字符

這樣做的直接修復(儘管我不確定它是否完全正確)是驗證「裸露」的密碼。這將驗證輸入的密碼,而不是散列版本:

#app/models/user.rb 
Class User < ActiveRecord::Base 
    validates :password, length: {minimum: 6} 
end 
+1

謝謝大家,那是原因! – Moh