我有一个基于CakePHP版本3.2.10的应用程序。我是全新的CakePHP所以抱歉,如果它是一个平庸的问题。在我的应用程序中,我使用这样配置的CSRF组件和Auth组件:
$this->loadComponent('Auth', [
'authorize'=> 'Controller',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
],
'scope' => [
'Users.active' => 1,
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
],
'logoutAction' => [
'controller' => 'Users',
'action' => 'logout'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'index'
],
'unauthorizedRedirect' => '/', // $this->referer()
]);
和像
这样的登录操作public function login()
{
$this->set('title', 'Logowanie');
$this->set('bodyclass', 'main-page');
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
if($user['blocked'] == 0) {
$this->Auth->setUser($user);
if ($this->Auth->user('role') == 'admin')
return $this->redirect(['controller' => 'Admin', 'action' => 'index']);
return $this->redirect($this->Auth->redirectUrl());
}
else{
$this->Flash->error('Konto zostało zablokowane przez administratora serwisu. Skontaktuj się z Biurem Obsługi.');
}
} else $this->Flash->error('Błędne dane logowania. Spróbuj ponownie.');
}
}
现在的问题是:
几天前,我改变了服务器上的应用程序正在运行,改变后,登录停止工作。单击登录后,有一条消息CSRF令牌cookie丢失。为了测试组件是否有问题,我禁用了csrf,然后再试一次,然后出现白屏,如果我刷新页面,我没有登录,什么也不会发生。我检查了工作版本和不工作版本,意识到蛋糕没有在新服务器上存储任何cookie,而在旧服务器上一切正常,并设置了cookie。
经过几次研究,我发现不仅饼干不工作,但所有的会话。我试图转储$_SEESION,但它显示的东西只有在调用$this->Auth->setUser($user)之后,没有其他地方。所以我查看了一些解决方案,发现在config/app.php中有一个设置来设置会话:
'Session' => [
'defaults' => 'php',
],
当以这种方式设置时,读取会话存储在默认的php目录中。所以我把它改为蛋糕(甚至在tmp文件夹下创建一个目录会话,并添加了777权限)。但问题并没有解决。我不知道为什么不行。我尝试在会话配置中设置cookiePath和其他设置,但它仍然不工作。
我认为这可能是服务器问题(权限)。所以关于服务器的几句话:旧服务器,一切都是我的私人服务器(我有完全的访问权限),新服务器(或虚拟服务器/主机)是在一个托管公司(home.pl),我几乎没有特权来配置。
请确保遵循以下步骤:
//For Set
var $var = array('Cookie');
//For Write
$this->Cookie->write('YOUR DESIRED NAME', cookieData, $expires = null);
//For Read
$this->Cookie->read('YOUR DESIRED NAME');
检查你的控制器代码应该在src/Controller/AppController.php
1)您是否在initialize()
或beforeFilter()
方法中正确加载cookie组件?
2)您是否使用$this->Cookie->configKey()
在cookie配置中配置了域和路径,如果是,则将域更改为新域或删除域配置。
有关Cookie的更多信息,请参阅文档