我是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']);
}
此时我可以添加用户,他们的密码是哈希但我无法登录。 任何帮助将不胜感激。 提前谢谢。
答案 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 ') ?>