diff --git a/security.rst b/security.rst index c70b01d8652..13476970fef 100644 --- a/security.rst +++ b/security.rst @@ -1723,6 +1723,45 @@ Next, you need to create a route for this URL (but not a controller): That's it! By sending a user to the ``app_logout`` route (i.e. to ``/logout``) Symfony will un-authenticate the current user and redirect them. +Logout programmatically +~~~~~~~~~~~~~~~~~~~~~~~ + +.. versionadded:: 6.2 + + The :class:`Symfony\Bundle\SecurityBundle\Security\Security ` + class was introduced in Symfony 6.2. Prior to 6.2, it was called + ``Symfony\Component\Security\Core\Security``. + +.. versionadded:: 6.2 + + The :method:`Symfony\\Bundle\\SecurityBundle\\Security\\Security::logout` + method was introduced in Symfony 6.2. + +You can logout user programmatically using the ``logout()`` method of the +:class:`Symfony\\Bundle\\SecurityBundle\\Security\\Security` helper:: + + // src/Controller/SecurityController.php + namespace App\Controller\SecurityController; + + use Symfony\Bundle\SecurityBundle\Security\Security; + + class SecurityController + { + public function someAction(Security $security): Response + { + // logout the user in on the current firewall + $response = $security->logout(); + + // you can also disable the csrf logout + $response = $security->logout(false); + + // ... return $response (if set) or e.g. redirect to the homepage + } + } + +The user will be logout from the firewall of the request. If the request is +not behind a firewall a ``\LogicException`` will be thrown. + Customizing Logout ~~~~~~~~~~~~~~~~~~