Cakephp 3.x 默认身份验证不起作用


cakephp 3.x default authentication don´t work

起初,我非常感谢这个伟大的社区,在那里我学到了很多东西。你是最棒的。:)

现在我在身份验证方面遇到了麻烦。我有一个简单的用户登录,我总是收到一个错误,信息用户名或密码是假的。我不知道为什么。:(

我在 cakephp 3.x 的官方教程附近工作。所以这是我的应用程序控制器代码:

public function initialize()
    {
        parent::initialize();
        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'fields' => [
                        'username' => 'mail',
                        'password' => 'password'
                    ]
                ]
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ]
        ]);
        $this->Auth->allow(['display']);
    }

这是用户控制器的代码:

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('Name or Password is wrong');               
        }               
    }

这是我的用户.php(实体(中的代码:

protected function _setPassword($value){
        $hasher = new DefaultPasswordHasher();
        return $hasher->hash($value);
}

这就是我对此的看法:

<h1>Login</h1>
<?= $this->Form->create() ?>
<?= $this->Form->input('email') ?>
<?= $this->Form->input('password') ?>
<?= $this->Form->button('Login') ?>
<?= $this->Form->end() ?>

这是我第一次在这里发帖,也是我第一次使用CakePHP 3.0,所以请帮助我:)。

请原谅我英语不好。 ^^

在应用程序控制器中,您将用户名设置为"邮件",并在您的视图中将输入名称调用为"电子邮件"。

在应用程序控制器和您的视图中设置相同的用户名字段以进行登录。

例如,如果数据库中的列名是"email",则 Auth 组件应如下所示:

$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'fields' => [
                'username' => 'email',
                'password' => 'password'
            ]
        ]
    ],
    'loginAction' => [
        'controller' => 'Users',
        'action' => 'login'
    ]
]);

您的登录视图应该与您拥有的完全一样。