php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp相关的知识,希望对你有一定的参考价值。

<?php 

// in controller->edit()
  public function edit(int $id=null) {
    $user = $this->Users->get($id, [
      'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
      /** 
       * Password Verification 
       * --------------------- */
      $inputtedPW = $this->request->data('password');
      $inputtedOldPW = $this->request->data('old_password');
      if ($user->password !== $inputtedPW) { /* change PW? */
        if (!$user->checkPassword($inputtedOldPW)) {
          $this->Flash->error('旧パスワードが一致しません。');
          return $this->redirect(['action' => 'edit', $id]);
        }
      } elseif ($this->request->data('old_password')) {
        $this->Flash->error('パスワードを変更しない場合、旧パスワードは入力しないでください。');
        return $this->redirect(['action' => 'edit', $id]);
      }
      $user = $this->Users->patchEntity($user, $this->request->getData());
      if ($this->Users->save($user)) {
        $this->Flash->success(MSG_UPDATE_SUCCESS);
        return $this->redirect(['action' => 'edit', $id]);
      }
      $this->Flash->error(MSG_UPDATE_ERROR);
    }
    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
  }

// in User Entity
  namespace App\Model\Entity;
  use Cake\ORM\Entity;
  use Cake\Auth\DefaultPasswordHasher;

  class User extends Entity
  {

    /**
     * Set Password via DefaultPasswordHasher
     * Set hashed password through patchEntity() in CREATE & UPDATE .
     * @param string $password
     * @return string (hashed password)
     */
    protected function _setPassword($password) {
      return (new DefaultPasswordHasher)->hash($password);
    }

    /**
     * Get hashed string via DefaultPasswordHasher
     * @param string $str
     * @return string (hashed str)
     */
    public function hashString(string $str='') {
      if (empty($str)) return false;
      return (new DefaultPasswordHasher)->hash($str);
    }

    /**
     * Check Password by DefaultPasswordHasher
     * Older password verification on UPDATE.
     * @param string $plainString 
     * @return bool true | false
     */
    public function checkPassword(string $plainString='') {
      if (empty($plainString)) return false;
      return (new DefaultPasswordHasher)->check($plainString, $this->password);
    }
  
  }

?>

<!-- in view -->
<?php echo $this->Form->password('password') ?>
<?php echo $this->Form->password('old_password', [
  'placeholder' => '変更する場合は旧パスワードを入力してください'
]) ?>

以上是关于php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp的主要内容,如果未能解决你的问题,请参考以下文章

php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp

php [cakephp:DropShell]删除所有应用程序表以进行开发。 #cakephp

php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp

由于缺少 PHP 扩展,CakePHP 3 无法连接到数据库

CakePHP 教程:PHP 开发框架

CakePhp 2.6.3 不适用于 PHP 7