无法实现身份验证 - CakePHP

时间:2017-05-24 02:18:41

标签: php authentication cakephp

我正在尝试按照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;
}

非常感谢您的帮助!!

谢谢!

2 个答案:

答案 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')
                )
            )
        )
    );

https://bitbucket.org/snippets/eom/rLo49