无法登录CakePHP 3

时间:2018-01-04 12:44:38

标签: php cakephp cakephp-3.0

我无法登录我的CakePHP应用程序。 $this->Auth->identify();不断返回false。

我的用户实体:

...
use Cake\Auth\DefaultPasswordHasher;
...
protected function _setPassword($value)
    {
        if (strlen($value)) {
            $hasher = new DefaultPasswordHasher();
            return $hasher->hash($value);
        }
    }

注意:我的Users表包含电子邮件和密码字段,两者都是varchar(255)。

我的 AppController

public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');

        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'fields' => [
                        'username' => 'email',
                        'password' => 'password'
                    ]
                ]
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ],
            'authError' => 'Log in to proceed',
            'unauthorizedRedirect' => $this->referer(),
            'storage' => 'Session'
        ]);
        $this->Auth->allow(['login', 'view', 'index']);
    }

我的 UsersController

public function login()
{
    $this->viewBuilder()->setLayout('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('Incorrect login data.');
    }
}

public function initialize()
{
    parent::initialize();
    $this->Auth->allow(['logout']);
}

public function logout()
{
    $this->Flash->success('You are now logged out.');
    return $this->redirect($this->Auth->logout());
    }
}

login.ctp ,以获得更好的衡量标准:

<div class="users form">
<?= $this->Flash->render('auth') ?>
    <?= $this->Form->create() ?>
    <fieldset class="form-group">
        <?= $this->Form->control('username', ['class' => 'form-control']) ?>
        <?= $this->Form->control('password', ['class' => 'form-control']) ?>
    </fieldset>
    <?= $this->Form->button(__('Login')); ?>
    <?= $this->Form->end() ?>
</div>

{I} var_dump($_POST)$user = $this->Auth->identify();之后,我会收到正确的数据。我自己检查了password_verify以确保它是正确的。它是。但仍然返回false,我一直收到错误的登录数据错误。

请不要将问题标记为重复,因为我阅读了所有其他问题和答案,但没有一个能解决我的问题。

请告知。

1 个答案:

答案 0 :(得分:3)

您已将Form身份验证器配置为使用email字段来标识用户,但您的表单不使用该字段,它使用username字段,因此验证者找不到发布的数据。

另见