我讀敏捷Web開發與鋼軌4密碼最少6個字符不起作用[導軌4]
用戶模型中我有不能小於6位字符密碼驗證書
validates :password_digest, length: {minimum: 6}
但實際上,當我創建一個新用戶時,它允許我用低於6的值來完成它。任何建議?
感謝
我讀敏捷Web開發與鋼軌4密碼最少6個字符不起作用[導軌4]
用戶模型中我有不能小於6位字符密碼驗證書
validates :password_digest, length: {minimum: 6}
但實際上,當我創建一個新用戶時,它允許我用低於6的值來完成它。任何建議?
感謝
簡而言之 - 您正在驗證錯誤的字段。將password_digest替換爲:password。
validates :password, length: { minimum: 6 }
這裏的時間長一點的解釋: 我已經打開了一本書,看着第14章(命名爲「任務我:登錄」)。 看起來你的用戶表有列'name','password_digest'和'salt'。 書中的示例描述瞭如何對密碼進行哈希處理,將其與鹽混合並將結果存儲在數據庫中。重點是 - 即使您從一個字母生成此密碼,您的'password_digest'將足夠長。你可以在irb中自己嘗試:
require 'digest'
Digest::SHA2.hexdigest('a') #=> "ca978112ca1bbdcafac231b39a2..."
所以,你不應該驗證哈希密碼的長度。相反,你應該驗證'密碼'屬性本身。
這是真的感謝這個詳細的答案,我很困惑,因爲在表中我有password_digest。 – Moh
沒什麼大不了的。我也是通過這本書學習Rails的。如果你喜歡,我們可以交換聯繫人。 – marvelousNinja
這是一本很棒的書,是的,它確實可以在這裏發送下午嗎?還有一個Skype羣組,他們在RoR上用黃瓜和rspec工作,如果你想我可以給你聯繫 – Moh
加密
你確認password_digest
- 這表明它是加密的密碼?
正如在評論中提到的,除非你的表單輸入將被稱爲password_digest
,很可能會被散列前進行驗證,使這個值總是超過6個字符
這樣做的直接修復(儘管我不確定它是否完全正確)是驗證「裸露」的密碼。這將驗證輸入的密碼,而不是散列版本:
#app/models/user.rb
Class User < ActiveRecord::Base
validates :password, length: {minimum: 6}
end
謝謝大家,那是原因! – Moh
您驗證password_digest而不是密碼嗎? – PriteshJ
是否有可能在驗證之前散列密碼? – Jite