3

我已经尝试了所有教程,所有 cakephp3 文档,但我仍然面临登录问题我的代码是:
Appcontroller.php

public function initialize()
    {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authorize'=> 'Controller',//added this line
            'authenticate' => [
                'Form' => [
                    'userModel' => 'Users', // Added This
                    'fields' => [
                        'username' => 'email',
                        'password' => 'password'
                    ]
                ]
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ]
        ]);

        $this->Auth->allow(['add']);
    }

用户控制器.php

public function login()
    {

        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error('Your username or password is incorrect.');
        }

    }

模型/实体/User.php

protected $_accessible = [
        '*' => true,
        'id' => false
    ];

    // ...

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

模型/表/UsersTable.php

class UsersTable extends Table
{

    public function validationDefault(Validator $validator)
    {
        return $validator
            ->notEmpty('username', 'A username is required')
            ->notEmpty('password', 'A password is required')
            ->notEmpty('role', 'A role is required')
            ->add('role', 'inList', [
                'rule' => ['inList', ['admin', 'author']],
                'message' => 'Please enter a valid role'
            ]);
    }

}

我在用户表字段中添加了许多用户,包括电子邮件、用户名、密码、角色。
1.当我将数据保存在用户表中时,密码以加密形式保存
2.当我进入登录表单并输入用户名或密码时,它总是显示错误的用户名或密码
3.当我打印$user = $this->Auth->identify();时总是给我空价值。
4. 我不明白是什么问题。
5. 当我在调试工具包中看到 sql log 时,它总是显示 'No active database connections'
请帮助我

4

1 回答 1

0

这是一个旧帖子,但我有同样的问题,我在这里找到了解决方案。基本上我的密码列(在数据库中)的大小不够大(只有 45 个字符)。这些是先前链接中的原始报价:

希望您在数据库中的密码列足够大:)

于 2017-11-10T01:14:22.567 回答