2013-06-19 224 views
4

我已經搜索了很多,試圖在書中的每一個技巧,但我仍然無法讓我的CakePHP應用程序執行簡單的密碼確認驗證。我試圖創建這樣一個自定義的驗證規則:密碼確認驗證CakePHP

'passwordequal' => array('rule' => 'checkpasswords' , 'message' => 'Passwords Do Not Match') 

然後定義「checkpasswords」是這樣的:

public function checkpasswords(){ 

    if(strcmp($this->data['User']['new_password'],$this->data['User']['confirm_password']) == 0) 
    { 
     return true; 
    } 
    return false; 
} 

「NEW_PASSWORD」和「confirm_password」是密碼輸入字段。這沒有奏效。然後我嘗試了一個我在其中散列'confirm_password'的東西。那也行不通。我還有其他'規則',以及沒有被驗證的'notempty',我認爲它是標準的CakePHP規則之一。任何人都可以請幫忙。我知道這個問題已被問了幾次,但這些解決方案都沒有爲我工作。 CakePHP文檔也沒有太多幫助。

+0

你有沒有輸出這些值,看看是否是由您的方法比較之前正確讀取? –

+0

你能向我們展示一個失敗的'$ this-> data'輸入的例子嗎?你也應該展示你的整個模型類代碼。 – Derek

+2

你可以在這裏找到提示,代碼示例以及完整的工作行爲:http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/ – mark

回答

0

看起來像您的模型沒有正確加載並使用動態生成的模型。

在2.x中比較密碼只不過是比較任何兩個字段,因爲cake不會自動將pw散列。

您能否確認您的驗證方法正在運行,好像不是這樣,尤其是如果像notEmpty這樣的簡單工作無效。在查看文件

15

兩個領域

echo $this->Form->input('password'); 
echo $this->Form->input('repass'); 

型號文件

<?php 
class Post extends AppModel { 
    public $validate = array(
     'repass' => array(
      'equaltofield' => array(
      'rule' => array('equaltofield','password'), 
      'message' => 'Require the same value to password.', 
      //'allowEmpty' => false, 
      //'required' => false, 
      //'last' => false, // Stop validation after this rule 
      'on' => 'create', // Limit validation to 'create' or 'update' operations 
      ) 
     ) 
    ); 

function equaltofield($check,$otherfield) 
    { 
     //get name of field 
     $fname = ''; 
     foreach ($check as $key => $value){ 
      $fname = $key; 
      break; 
     } 
     return $this->data[$this->name][$otherfield] === $this->data[$this->name][$fname]; 
    } 
}?> 
+0

我不知道$ this-> data可以在model中使用。我認爲它在2.x版本中已被棄用。感謝那。 – Garry

+0

當使用'echo $ this-> Form-> input('repass');',你的密碼**顯示純文本**。這是不可接受的。而更好的是使用客戶端來驗證第一(JavaScript)。 –

+0

@DoNhuVy在渲染視圖文件中的字段時,可以使用'array('type'=>'password')'作爲參數來輕鬆修復它。不可接受的是僅僅依靠客戶端來進行這種驗證。你應該總是期望有些用戶會禁用JavaScript來「破解」你的系統。 – luizs81