我无法登录我的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,我一直收到错误的登录数据错误。
请不要将问题标记为重复,因为我阅读了所有其他问题和答案,但没有一个能解决我的问题。
请告知。
答案 0 :(得分:3)
您已将Form
身份验证器配置为使用email
字段来标识用户,但您的表单不使用该字段,它使用username
字段,因此验证者找不到发布的数据。
另见