我正在登录网站的一部分。 因此,我不想在AppController中启动Auth,但在实际的Controller中我需要它。
在PremiumController中:
[...]
use Cake\Controller\Component\AuthComponent;
[...]
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'Basic' => ['userModel' => 'Clients'],
'Form' => ['userModel' => 'Clients'],
'loginAction' => [
'controller' => 'Premium',
'action' => 'login',
'plugin' => false
],
'authError' => 'Unauthorized Access',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'naam',
'password' => 'pass'
],
'userModel'=>'Clients', //Other table than Users
'passwordHasher' => [
'className' => 'Premium', //use MD5
]
]
],
'loginRedirect' => [
'controller' => 'Premium',
'action' => 'dashboard'
],
'logoutRedirect' => [
'controller' => 'Search',
'action' => 'index'
]
]);
}
[...] 并降低登录部分
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(__('Invalid username or password, try again'));
}
}
我没有得到任何结果。 $ user仍为'false'
如何才能完成这项工作?有没有办法正确调试Auth组件?
答案 0 :(得分:0)
尝试在会话中分配密钥,以便Auth检查会话中是否存在密钥。
像这样更改你的代码,
$this->loadComponent('Auth', [
'Basic' => ['userModel' => 'Clients'],
'Form' => ['userModel' => 'Clients'],
'loginAction' => [
'controller' => 'Premium',
'action' => 'login',
'plugin' => false
],
'authError' => 'Unauthorized Access',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'naam',
'password' => 'pass'
],
'userModel'=>'Clients', //Other table than Users
'passwordHasher' => [
'className' => 'Premium', //use MD5
]
]
],
'loginRedirect' => [
'controller' => 'Premium',
'action' => 'dashboard'
],
'logoutRedirect' => [
'controller' => 'Search',
'action' => 'index'
]
]);
$this->Auth->__set('sessionKey', 'Auth.client');
答案 1 :(得分:0)
控制器侦听登录页面及其确切的请求名称。
我的login.ctp的内容是这个
<?= $this->Form->input('username', ['type' => 'text', 'id' => 'username', 'label' => __('Login / E-mail'), 'placeholder' => __('Login / E-mail')]) ?>
<?= $this->Form->input('password', ['type' => 'password', 'id' => 'password', 'label' => __('Wachtwoord'), 'placeholder' => __('Wachtwoord')]) ?>
我不得不将其改为
<?= $this->Form->input('naam', ['type' => 'text', 'id' => 'username', 'label' => __('Login / E-mail'), 'placeholder' => __('Login / E-mail')]) ?>
<?= $this->Form->input('pass', ['type' => 'password', 'id' => 'password', 'label' => __('Wachtwoord'), 'placeholder' => __('Wachtwoord')]) ?>
将后数据请求解析为正确的字段。 我误解的是,财务主任对此表示不满。
答案 2 :(得分:0)
这会在我搜索 cakephp 3 "sessionkey" 时显示,因此这适用于需要在 CakePHP 3 应用程序中设置自定义 sessionKey
的任何人。在您的src/Application.php
中:
$service->loadAuthenticator('Authentication.Session', [
'sessionKey' => 'MyAuthKey',
]);