2016-08-13 19 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)) ...