Задать вопрос

Symfony 4, как закрыть сессию пользователя?

Здравствуйте!

Не могу программно закрыть сессию пользователю. Это нужно если пароль или "блокировка" были изменены.
Пробовал и так
$this->tokenStorage->setToken(null);
(не происходит ниче)
и так
$request->getSession()->invalidate(1);
(Пишет, что нельзя изменить активную сессию)

и даже так
SecurityController::logout();
(выбрасывает исключение)

Пробовал так же перенести хранилище сессий в базу и удалять их оттуда. Просто появляются новые.
Я понимаю, что похоже, проверяю где-то между "успешно проверено" и записью сессий и он просто записывает новые. Куда же правильно засунуть свои эти проверки так, чтобы я мог делать программный логаут?
  • Вопрос задан
  • 387 просмотров
Подписаться 3 Средний 4 комментария
Решения вопроса 1
@mamontovdmitriy
PHP Developer
Можно так
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;


private function closeCurrentSession(TokenStorageInterface $tokenStorage, Request $request)
{
        $token = new AnonymousToken('default', 'anon.');
        $tokenStorage->setToken($token);
        $request->getSession()->invalidate();
        throw new AccessDeniedException();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы