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 をストレージとして使用しており、現在、それがどのクラスなのかわかりません。
以前にそのようなことに遭遇した人はいますか、またはどこで確認すべきか提案がありますか?