我正在使用 Zend Framework 2、ZfcUser 和 BjyAuthorize。登录和访问控制有效,但在某些情况下用户会被注销:当他们尝试导航到不同的页面时,当前页面上的 AJAX 调用仍在运行。
在 Chrome 的网络窗口中,它显示 AJAX 调用已取消,然后调用您尝试导航到的页面,以下代码检查您是否已登录,发现您未登录($auth->hasIdentity()
返回 false),然后发送你到登录页面。
$sm = $event->getApplication()->getServiceManager();
$auth = $sm->get('zfcuser_auth_service');
$routeParams = $event->getRouteMatch()->getParams();
// List of action non-authenticated users may access
$whitelist = array('login' => 1, 'register' => 1, 'forgotPassword' => 1, 'resetPassword' => 1);
$hasIdentity = $auth->hasIdentity();
if (!$hasIdentity && !array_key_exists($routeParams['action'], $whitelist) ) {
$targetUrl = $event->getRouter()->assemble(array(), array('name' => 'zfcuser/login', 'absolute' => true));
$response = $event->getResponse();
$response->getHeaders()->addHeaderLine('Location', $targetUrl);
$response->setStatusCode(302);
$response->sendHeaders();
}
显然会话刚刚消失?我在弄清楚如何/在哪里保存它时遇到了一些麻烦。使用了 ZfcUser\Authentication\Storage\Db,但它使用 Storage\Session 作为存储,现在我不确定那是什么类。
有没有人遇到过类似的情况,或者有建议在哪里检查?