2016-08-13 13 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かのどちらかを使用すると呼ばれるように適切にエンティティに置かハッシングでNewEntity(私は、確認してくださいと思いますか?)

第2に、$this->[model]->save()関数は、データだけでなくエンティティでも機能します。したがって、ユーザーのエンティティを見つけ、エンティティにパッチを当てて保存してから保存してください:

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

if ($this->Users->save($user)) ... 
関連する問題