2013-03-11 72 views
0

我有一個用戶註冊頁面。我想要用戶密碼從4到16個符號。我需要檢查他們是否至少有一個大寫字母和一個數字。比我做這個密碼的MD5哈希,並將其放入數據庫。
如何驗證它?
驗證的模型試驗,如果密碼是32symbols長度:驗證密碼的正確方法

validates :password, :length => { :minimum => 32 , 
      :message => 'Not an md5 password provided.' } 

但我怎麼驗證密碼,使得它的哈希值,並設置相應的錯誤,這個驗證之前我的要求相匹配?
我想查看以獲取user.errors [:密碼]包含像'必須至少有一個數字'。和「必須至少有一個大寫字母」。

+1

理想情況下,你的模型,這將哈希它提供密碼爲你提供幫助,並免除散列自己的密碼(或忘記的後果)的來電者。但我不確定你如何使用ActiveRecord來做到這一點。 – cHao 2013-03-11 19:12:04

回答

2

您可以創建一個自定義的驗證方法,在這裏你可以做任何你想要的:

validate :password_validation 

def password_validation 
    unless password.length > 32 && ... # other requirements 
    errors.add(:password, 'Not an md5 password provided.') 
    end 
end 
+0

是的,當然,但在模型驗證中創建md5似乎不合邏輯。邏輯去控制器,驗證去模型。 – konnigun 2013-03-11 19:24:20

+1

如果要分隔驗證密碼和保存散列的過程,可以創建一個'after_validation'方法。對我來說,模型的工作是對它自己的數據負責。我不認爲與自己的數據直接相關的邏輯會成爲模型的一部分。 – 2013-03-11 19:33:10

+0

啊,我明白了。現在肯定有效。謝謝! – konnigun 2013-03-11 19:38:37