2012-05-19 79 views
1

幾個月前我開始嘗試CakePHP,現在我正嘗試爲登錄用戶創建一個「更改密碼頁」。我有一個由這些字段組成的表單:當前密碼,新密碼和新密碼確認。對於當前密碼,我想驗證它是否與登錄用戶的密碼匹配,作爲用戶模型中的規則。 我知道我可以通過以下方式獲取登錄用戶的信息:AuthComponent::user()。但是,它爲我提供了除密碼之外的所有模型字段。CakePHP - 無法使用Authcomponent訪問模型中登錄的用戶密碼::用戶

我知道Auth->login()負責設置會話變量爲登錄的用戶,但我不知道我在做什麼錯在這裏,只有密碼字段不能被訪問:

public function login() { 

    if ($this->request->is('POST')) { 
     if($this->Auth->login()) { 
      $this->redirect($this->Auth->redirect()); 
     } else { 
      $this->Session->setFlash('Your username/password combination was incorrect.'); 
     } 
    } 
} 

這裏是我的登錄視圖:

<h2>Login</h2> 
<?php 
echo $this->Form->create('Promoter'); 
echo $this->Form->input('username'); 
echo $this->Form->input('password', array('type' => 'password')); 
echo $this->Form->end('Login');?> 

我使用的子模型作爲用戶,我在AppController中設置:

public $components = array(
    'Auth'=>array(
     ... 
     'authenticate' => array(
      'Form' => array('userModel' => 'Promoter') 
     ), 
     'authorize' => array('Controller') 
    ) 
); 

我可以訴諸在控制器驗證密碼,但這將放棄:)請告訴我,如果我需要提供更多的代碼來澄清問題。

謝謝。

回答

0

你可能沒有做錯什麼,這很可能是安全功能。沒有理由在會話中保留密碼。

其次,即使是在會話中,它也會被加密(或者至少我希望如此,如果不是,你應該馬上改變!)。所以你仍然不能做一個簡單的比較。

要比較舊密碼,您應該查詢您的Promoter模型,並從那裏獲取散列密碼,然後從您的「更改密碼」表單中散列舊密碼,最後比較散列結果。

+0

謝謝。這很好。 – timp

0

因爲蛋糕不存儲在會話密碼:

的lib /蛋糕/組件/認證/ BaseAuthenticate.php線94

unset($user[$fields['password']]); 
相關問題