用户身份验证失败

时间:2015-05-13 12:20:13

标签: cakephp cakephp-3.0

所以这是我的登录方法:

public function login()
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            } else {
                $this->Flash->error(__('Invalid username or password, try again'));
            }

        }
    }

这就是我在用户实体中输入密码的方式:

<?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

/**
 * User Entity.
 */
class User extends Entity
{

    /**
     * Fields that can be mass assigned using newEntity() or patchEntity().
     *
     * @var array
     */
    protected $_accessible = array(
        'first_name' => true,
        'last_name' => true,
        'email' => true,
        'username' => true,
        'password' => true,
        'role' => true,
        'created' => true
    );
    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }
}

我已经有工作用户注册并且它没有问题(密码被哈希),但由于某种原因我无法登录,它总是说

  

用户名或密码无效,请重试

但是我的表中有这些,这是查询:

SELECT 
    Users.id AS `Users__id`, 
    Users.first_name AS `Users__first_name`, 
    Users.last_name AS `Users__last_name`, 
    Users.email AS `Users__email`, 
    Users.username AS `Users__username`, 
    Users.password AS `Users__password`, 
    Users.role AS `Users__role`, 
    Users.created AS `Users__created` 
FROM 
    users Users 
WHERE 
    Users.username = 'admin' LIMIT 1

但由于某种原因,它在我的应用程序中没有任何作用。我猜密码有问题吗?

形式:

<div class="users form">
    <?= $this->Flash->render('auth') ?>
    <?= $this->Form->create() ?>
        <fieldset>
            <legend><?= __('Please enter your username and password') ?></legend>
            <?= $this->Form->input('username') ?>
            <?= $this->Form->input('password') ?>
        </fieldset>
    <?= $this->Form->button(__('Login')); ?>
    <?= $this->Form->end() ?>
</div>

AppController的:

class AppController extends Controller
{

    /**
     * Initialization hook method.
     *
     * Use this method to add common initialization code like loading components.
     *
     * @return void
     */
    public function initialize()
    {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginRedirect' => [
                'controller' => 'Jobs',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Jobs',
                'action' => 'index'
            ],
            'authorize' => ['controller']
        ]);
    }

    public function beforeFilter(Event $event)
    {
        $this->Auth->allow(['index', 'browse', 'view', 'register']);
    }
}

1 个答案:

答案 0 :(得分:0)

在这里找到答案: Login [ Auth->identify() ] always false on CakePHP 3

要点:

表字段密码为VARCHAR(45)而不是VARCHAR(255)