Я хотел бы сделать что-то вроде этого в контроллере для выхода из системы:
$user = $this->get('security.context')->getToken()->getUser();
$user->logOut();
Я хотел бы сделать что-то вроде этого в контроллере для выхода из системы:
$user = $this->get('security.context')->getToken()->getUser();
$user->logOut();
Выход из Symfony2 выполняется с помощью так называемого обработчика выхода, который является только листером, который выполняется, когда шаблон соответствия URL-адресов из конфигурации безопасности, т.е. если URL-адрес можно сказать /logout
, то этот прослушиватель выполняется. Есть два встроенных обработчика выхода:
Все, что вам нужно сделать, это то же самое, что и последнее. Вы можете достичь этого, просто позвонив:
$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
$this->get('security.token_storage')->setToken(null);
$this->get('request')->getSession()->invalidate();
Это будет работать только тогда, когда функция запомнить меня отключена. В другом случае пользователь будет снова зарегистрирован с помощью куки файла "запомнить меня" со следующим запросом.
Пожалуйста, рассмотрите расширенное решение, если вы используете, помните мне функциональность: fooobar.com/questions/142583/...
Мы должны установить пользователя как анонимного пользователя при выходе из системы. Тогда мы можем использовать
$token->getUser()->getRoles();
в контроллере или {% if is_granted('ROLE_USER') %}
в шаблоне ветки.
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
...
//$providerKey = $this->container->getParameter('fos_user.firewall_name');
$token = new AnonymousToken($providerKey, 'anon.');
$this->get('security.context')->setToken($token);
$this->get('request')->getSession()->invalidate();
Недействительность сеанса пользователя может вызвать некоторые нежелательные результаты. У брандмауэра Symfony есть слушатель, который всегда проверяет и обновляет токен пользователя. Вы можете просто перенаправить маршрут маршрутизации по умолчанию, который вы указали в своем firewall.yml
В контроллере вы можете сделать это:
$this->redirect( $this->generateUrl( 'your_logout_url' ) );
если вы не знаете имя маршрута выхода из системы. Вы можете проверить его на консоли:
app/console router:match /logout
эта команда даст вам имя маршрута, которое вам понадобится.
:)
Если функция memme включена для вашего сайта, вы также должны очистить файл cookie memme:
$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
$response = new RedirectResponse($this->generateUrl('dn_send_me_the_bundle_confirm', array(
'token' => $token
)));
// Clearing the cookies.
$cookieNames = [
$this->container->getParameter('session.name'),
$this->container->getParameter('session.remember_me.name'),
];
foreach ($cookieNames as $cookieName) {
$response->headers->clearCookie($cookieName);
}