【问题标题】:Cakephp 3.7.4 Auth hash password Not workingCakephp 3.7.4 Auth哈希密码不起作用
【发布时间】:2019-09-12 09:19:05
【问题描述】:

我正在尝试实现auth登录并注册cakephp 3.7.4

我已经为 UsersController 添加方法使用了以下代码

public function add()
{
    $this->viewBuilder()->setLayout('login');
    $user = $this->Users->newEntity();
    if ($this->request->is('post')) {
        $post = $this->request->getData();
        $post['created'] = date('Y-m-d H:i:s');
        $post['modified'] = date('Y-m-d H:i:s');
        $user = $this->Users->patchEntity($user, $post);
        if ($this->Users->save($user)) {
            $this->Flash->success(__('The user has been saved.'));
            return $this->redirect(['action' => 'login']);
        }
        $this->Flash->error(__('Unable to add the user.'));
    }
    $this->set('user', $user);
}

但它不能以哈希格式保存密码

我也创建了实体并使用了这个功能,但它也没有帮助我

 class User extends Entity
 {
   protected $_accessible = [
     'email' => true,
    'password' => true
  ];
 protected $_hidden = [
    'password'
 ];
 protected function _setPassword($password){
  return(new  DefaultPasswordHasher)->hash($password);
 }
}

【问题讨论】:

  • “无法保存”非常模糊。您收到错误消息吗?它是否保存未散列的密码?它会保存一个空白密码吗?
  • @GregSchmidt 不,它不会产生错误。它将保存我们输入的相同密码
  • debug($user);newEntity 调用之后。是什么类型的?它是预期的User 实体还是通用对象?
  • 为什么要自己添加修改和创建?尝试将 TimestampBehavior 添加到您的用户表。我建议使用调试器,例如 xdebug 并在 _setPassword() 中设置断点。
  • @Seb 这是密码散列的主要原因吗

标签: cakephp cakephp-3.0 cakephp-3.7


【解决方案1】:

我安装了一个全新的 Cake 3.7.4 安装,烘焙了一个 users 表、users 控制器和 users 表/实体。用户类的以下代码在将密码写入数据库之前成功地对密码进行了哈希处理。请与您的代码进行比较。

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{
    protected $_accessible = [
        'email' => true,
        'password' => true,
        'modified' => true,
        'created' => true
    ];
    protected $_hidden = [
        'password'
    ];

    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher())->hash($password);
    }
}

【讨论】:

  • 不工作 public function add() { $this->viewBuilder()->setLayout('login'); $this->loadModel('Users'); $user = $this->Users->newEntity(); if ($this->request->is('post')) { $user = $this->Users->patchEntity($user, $this->request->data); if ($this->Users->save($user)) { $this->Flash->success(__('用户已被保存。')); return $this->redirect(['action' => 'login']); } $this->Flash->error(__('无法添加用户。')); $this->set('user', $user); }
【解决方案2】:

只需在DefaultPasswordHaser() 周围使用括号:

return(new  DefaultPasswordHasher())->hash($password);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2021-10-03
    相关资源
    最近更新 更多