2011-04-23 27 views
2

我想要在changepassword模塊上工作。我想從數據庫檢查用戶當前密碼是否與用戶輸入的相同。我已經定義了一個$ validate數組,如下所示。

`'old_password' => array(
       'minLength' => array(
        'rule' => array('minLength', 1), 
        'message' => 'Current Password is required' 
       ), 
       'oldPass' => array(
        'rule' => array('oldPass',array('old_password')), 
        'message' => 'Current Password is invalid' 
       ) 
      ),` 

,並定義了一個方法來檢查當前的密碼

`function oldPass($data){ 
     if(!empty($data['old_password'])) { 
      $valid = false; 
      $userData = $this->Auth->user(); // here I am getting error 
      $oldPass = Security::hash(Configure::read('Security.salt') . $data['old_password']); 
      if ($userData['User']['password'] == $oldPass) { 
       $valid = true; 
      } 
      return $valid; 
     } else { 
      return false; 
     } 

    }` 

這裏是我得到 未定義的屬性錯誤:用戶:: $驗證[APP \型號\ user.php的,行194] 致命錯誤:調用一個成員函數用戶()一個非對象在

基本上所有我想要匹配由用戶輸入的密碼的當前密碼

我正在使用 $ this-> User-> validates()進行驗證。並獲取錯誤消息我正在使用$ this-> set('validationErrorsArray',$ this-> User-> invalidFields());

請幫助我如何獲取模型中當前登錄的用戶ID。

+0

我使用給出的代碼示例解決了這個問題[link] http://www.ninjacodermonkey.co.uk/2010/10/obtaining-user-id-in-model-validation-cakephp/ [/ link] – deep 2011-04-23 03:55:15

+0

我也是..謝謝你的鏈接 – 2012-01-06 01:00:14

回答

1

如果您已集成身份驗證組件,那麼你必須按照獲得當前用戶:

$user = $this->Session->read("Auth.User"); 
$this->User->id = $user['id']; 
$userData = $this->User->read(); 
-1

您可以通過

$_SESSION['Auth']['user']['username'] 
+2

這可行,但食譜說「CakePHP中通常避免使用$ _SESSION」。請參閱http://book.cakephp.org/2.0/en/development/sessions.html – 2014-01-22 10:31:14

23

獲取用戶名有一個乾燥的方法:

$uid = CakeSession::read("Auth.User.id"); 

注意,這是隻爲CakePHP 2.x - 一個d仍然不應該做。 通常您將需要的會話數據顯式傳遞到模型層。

在3.x中,您無法靜態訪問會話了,您肯定需要將數據傳遞到模型層。

+0

在CakePHP/2.2.x中正常工作 – 2012-10-04 08:06:23

+5

不要忘記添加App :: uses('CakeSession','Model/Datasource')'在模型文件的頂部。 – mark 2012-12-12 23:25:19