В настоящее время я переношу проект 2.0. * на текущую 2.1 бета-версию Symfony.
В моих функциональных тестах я в настоящее время имею этот код для создания клиента с аутентификацией:
$client = // create a normal test client
$role = 'ROLE_USER';
$firewallName = 'main';
$user = // pull a user from db
$client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie(session_name(), true));
$token = new UsernamePasswordToken($user, null, $firewallName, array($role));
self::$kernel->getContainer()->get('session')->set('_security_' . $firewallName,
serialize($token));
это работает как ожидается в версии 2.0. *, но не в 2.1, данные не будут установлены в сеансе.
Любые идеи?
Изменить (добавить дополнительную информацию):
кажется, что проблема заключается в файле Symfony\Component\Security\Http\Firewall\ContextListener "в методе onKernelResponse". Существует этот код:
if ((null === $token = $this->context->getToken()) || ($token instanceof AnonymousToken)) {
$session->remove('_security_'.$this->contextKey);
} else {
$session->set('_security_'.$this->contextKey, serialize($token));
}
в моем случае if, если "$ token instanceof AnonymousToken" истинно, и из-за этого ключ сеанса удаляется. если я прокомментирую этот код, все работает так, как ожидалось.
Итак, я думаю, мой новый вопрос: что я могу сделать, чтобы маркер не был анонимным?