2016-08-13 61 views
0

我試圖在CakePHP 3.x中實現一個忘記的密碼功能。 我創建了接受用戶的郵件形式:如何在cakephp3.x中實現忘記的密碼

<?= $this->Form->create()?> 
<div class="form-group"> 
    <?= $this->Form->input('email', array('class' => 'form-group','autocomplete' => 'off' ,'required' => 'required'))?> 
</div> 
<div class="form-group">  
    <?= $this->Form->button('Reset Password', array('class' => 'form-group primary'))?> 
</div> 
<?= $this->Form->end()?> 

在我的控制,我試圖找到通過電子郵件的用戶,如果電子郵件存在,那麼就會產生一個隨機密碼,密碼會更新該電子郵件ID:

use Cake\ORM\TableRegistry; 
use Cake\Auth\DefaultPasswordHasher; 

    public function forgotPassword($email = null){ 

    if($this->request->is('post')) { 
     $email = $this->request->data['email']; 

     $emails = TableRegistry::get('Users'); 
     $user = $emails->find()->where(['email' => $email ])->first(); 

     if (!$user) { 
      $this->Flash->error(__('No user with that email found.')); 
      return $this->redirect(['controller' => 'Users','action' => 'forgotPassword']); 

     }else{ 

       $random = 'a'; 
       $hasher = new DefaultPasswordHasher(); 
       $val = $hasher->hash($random); 
       $data = $this->Users->password = $val; 
       if ($this->Users->save($data)) { 
        $this->Flash->success(__('Password changed Succesfully.')); 
        return $this->redirect(['controller' => 'Users','action' => 'forgotPassword']); 

       } 


     } 
    } 
} 

回答

0

您還沒有真正指出具體的問題/問題,但我想我可能知道是什麼能幫上忙。

整個DefaultPasswordHasher位應該在UsersEntity文件,就像在教程:儘快Blog tutorial

與示例中的哈希正確放置在實體喜歡它會自動被稱爲您使用PatchEntity或新實體(我認爲,請確認?)。

其次,$this->[model]->save()函數適用於實體,而不僅僅是數據。所以你會找到用戶的實體,修補實體然後保存:

...} else { 
$newpass = 'randomstring'; 
$user = $this->Users->PatchEntity($user, ['password' => $newpass]); 

if ($this->Users->save($user)) ...