2010-06-30 98 views
1

如何在CakePHP中的密碼字段上運行驗證檢查,在我有機會運行任何檢查之前查看密碼被哈希?使用CakePHP 1.3驗證密碼

+0

我需要在散列之前對其進行驗證。我想檢查的主要事情是它的長度。 – chustar 2010-06-30 20:26:42

+0

我沒有使用cakePHP,但不能在輸入上使用相同的哈希函數,然後將其與存儲的哈希密碼進行比較? – Catfish 2010-06-30 20:34:11

回答

3

如果你只在你的形式單一password場,你將需要create a custom hash function,要麼什麼也不做,或者更好的,保留了原始密碼的地方。

很可能您的窗體中有兩個密碼字段,用戶需要確認密碼。在這種情況下,您需要在第二個密碼字段上執行密碼驗證規則。這可以在自定義驗證規則中自動發生,請記住您可以通過$this->data訪問驗證功能中的所有其他字段。然後您可以確認這兩個密碼與described here相同。

+0

我似乎遇到的問題是密碼在進入驗證階段之前被散列,因此我運行的驗證只適用於散列密碼。 – chustar 2010-07-01 00:05:24

+0

@chustar這就是爲什麼你在'password2'字段進行驗證**,**不會自動散列。 – deceze 2010-07-01 00:07:56

+0

這篇博客文章詳細說明了如何創建自定義哈希函數,以解決此問題:http://teknoid.wordpress.com/2008/10/08/demystifying-auth-features-in-cakephp-12 /(從第二個代碼示例開始讀取。) – deizel 2010-07-01 21:41:31

0

它以這種方式工作,我(模型):

public $validate = array(
     'password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8') 
      ) 
     ) 
    ); 

如果你想要做更多的驗證,然後創建相應的模型custom validation method。在自定義的驗證方法哈希密碼這樣:Security::hash($this->data['User']['password'], null, true)

+0

當然這是有效的,因爲它總是**,因爲在驗證之前密碼被哈希,並且哈希總是超過8個字符。這對於強制使用8個字符或更長的非哈希密碼沒有任何作用。嘗試使用單個數字密碼測試您的表單 - 它會進行驗證。 – 2010-07-05 03:20:44

+0

實際上,我不得不提及,我有'confirm_password'字段在相同的形式與相同的驗證規則。我很早以前就創建了這個表單,因此我忘記了在視圖中標記爲「密碼」,而在實際字段中我標記爲「確認密碼」。所以,當我輸入一個字符進行密碼驗證失敗時。 – bancer 2010-07-05 10:01:14