Метод logout класса Security
Метод logout класса Security завершает сессию текущего пользователя и удаляет его токен из хранилища. После вызова этого метода пользователь считается анонимным, а все данные, связанные с его аутентификацией, становятся недоступными. Метод не принимает обязательных параметров и возвращает void.
Синтаксис
public function logout(): void
Пример
Давайте получим сервис Security в контроллере и вызовем метод logout для завершения сессии пользователя:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Core\Security;
class AuthController extends AbstractController
{
#[Route('/logout/manual', name: 'auth_logout_manual')]
public function logoutManual(Security $security): Response
{
$security->logout();
return new Response('User logged out');
}
}
?>
Результат выполнения кода:
User logged out
Пример
Давайте проверим, что после вызова logout пользователь действительно стал анонимным, используя метод getUser:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Core\Security;
class AuthController extends AbstractController
{
#[Route('/logout/check', name: 'auth_logout_check')]
public function logoutCheck(Security $security): Response
{
$userBefore = $security->getUser();
$security->logout();
$userAfter = $security->getUser();
$res = [
'before' => $userBefore ? $userBefore->getUserIdentifier() : null,
'after' => $userAfter ? $userAfter->getUserIdentifier() : null,
];
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода для аутентифицированного пользователя 'abcde':
{"before":"abcde","after":null}