我正在尝试按照cookbook中的步骤实现身份验证,但是看到Auth-> identify()函数仍然没有向$ user变量返回任何内容,就像找不到凭据一样。 我有一个名为 Usuarios 的表名,我想用电子邮件和 contrasena (密码)字段进行身份验证。
这就是我的所作所为:
AppController.php
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => ['finder' => 'auth',
'userModel' => 'Usuarios']
],
'loginAction' => [
'controller' => 'Usuarios',
'action' => 'login'
],
'unauthorizedRedirect' => $this->referer()
]);
$this->Auth->allow(['display']);
UsuariosController.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('Tu usuario o contraseña es incorrecta.');
}
}
login.ctp
<h1>Login</h1>
<?= $this->Form->create() ?>
<?= $this->Form->control('email') ?>
<?= $this->Form->control('password') ?>
<?= $this->Form->button('Login') ?>
<?= $this->Form->end() ?>
UsuariosTable.php
public function findAuth(\Cake\ORM\Query $query, array $options)
{
$query
->select(['id', 'email', 'contrasena'])
->where(['Usuarios.estado' => 1]);
return $query;
}
非常感谢您的帮助!!
谢谢!
答案 0 :(得分:0)
愚蠢的猜测
在login.ctp
<?= $this->Form->control('password') ?>
应该是
<?= $this->Form->control('contrasena') ?>
答案 1 :(得分:0)
您必须根据电子邮件和用户名进行一些更改:
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email')
)
)
)
);