CakePhp 3.0无法登录

时间:2015-02-22 15:16:58

标签: php cakephp authentication

我是CakePhp框架的新手并遵循博客教程。 一切顺利,直到认证部分。

以下两行是问题所在:

<?= $this->Form->input('Usuario') ?>
<?= $this->Form->input('Contraseña') ?>

正确的行是:

<?= $this->Form->input('username') ?>
<?= $this->Form->input('password') ?>

这是来自UsersControllers.php的登录方法,调试行总是返回false。

public function login()
    {
        if ($this->request->is('post')) {
            debug($this->Auth->identify());
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error(__('Usuario o contraseña inválida, intente nuevamente'));
        }
    }

这是我的用户类 我不得不更改受保护的行$ _accessible = ['*'=&gt;真正];如教程中所示,否则将无法保存用户。

class User extends Entity
{
    // Make all fields mass assignable for now.
    protected $_accessible = ['username' => true,'password'=>true,'role'=>true,'created'=>true,'modified'=>true];
    // ...
    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }
    // ...
}

这是我的login.ctp

<div class="users form">
    <?= $this->Flash->render('auth') ?>
    <?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('Ingrese su usuario y contraseña') ?></legend>
        <?= $this->Form->input('Usuario') ?>
        <?= $this->Form->input('Contraseña') ?>
    </fieldset>
    <?= $this->Form->button(__('Login')); ?>
    <?= $this->Form->end() ?>
</div>

这些是我的AppController.php方法:

public function initialize()
{
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
    'loginRedirect' => [
    'controller' => 'Expedientes',
    'action' => 'index'
    ],
    'logoutRedirect' => [
    'controller' => 'Pages',
    'action' => 'display',
    'home'
    ]
    ]);
}

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

此时我可以添加用户,他们的密码是哈希但我无法登录。 任何帮助将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

或者,在设置Auth组件配置时,您可以设置数据库中哪些字段用作用户名和密码

 $this->Auth->config('authenticate', [
        'Form' => [
                      'fields' => [
                                  'username'=>'email',
                                  'password' => 'password'
                              ],
                      'userModel' => 'Users'
                  ]
         ]); 

答案 1 :(得分:0)

谢谢@ndm的回答。我在以下行中翻译了用户名和密码字段:

<?= $this->Form->input('Usuario') ?>
<?= $this->Form->input('Contraseña') ?>

正确的行是:

<?= $this->Form->input('username') ?>
<?= $this->Form->input('password ') ?>