@@ -1766,17 +1766,40 @@ In some cases you need to run extra logic upon logout (e.g. invalidate
1766
1766
some tokens) or want to customize what happens after a logout. During
1767
1767
logout, a :class: `Symfony\\ Component\\ Security\\ Http\\ Event\\ LogoutEvent `
1768
1768
is dispatched. Register an :doc: `event listener or subscriber </event_dispatcher >`
1769
- to run custom logic. The following information is available in the
1770
- event class:
1771
-
1772
- ``getToken() ``
1773
- Returns the security token of the session that is about to be logged
1774
- out.
1775
- ``getRequest() ``
1776
- Returns the current request.
1777
- ``getResponse() ``
1778
- Returns a response, if it is already set by a custom listener. Use
1779
- ``setResponse() `` to configure a custom logout response.
1769
+ to execute custom logic::
1770
+
1771
+ // src/EventListener/LogoutSubscriber.php
1772
+ namespace App\EventListener;
1773
+
1774
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1775
+ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1776
+ use Symfony\Component\HttpFoundation\RedirectResponse;
1777
+ use Symfony\Component\Security\Http\Event\LogoutEvent;
1778
+
1779
+ class LogoutSubscriber extends AbstractController implements EventSubscriberInterface
1780
+ {
1781
+ public static function getSubscribedEvents(): array
1782
+ {
1783
+ return [LogoutEvent::class => 'onLogout'];
1784
+ }
1785
+
1786
+ public function onLogout(LogoutEvent $event): void
1787
+ {
1788
+ // get the security token of the session that is about to be logged out
1789
+ $token = $event->getToken();
1790
+
1791
+ // get the current request
1792
+ $request = $event->getRequest();
1793
+
1794
+ // get the current response, if it is already set by another listener
1795
+ $response = $event->getResponse();
1796
+
1797
+ // configure a custom logout response
1798
+ $event->setResponse(
1799
+ new RedirectResponse($this->generateUrl('homepage', []), RedirectResponse::HTTP_SEE_OTHER)
1800
+ );
1801
+ }
1802
+ }
1780
1803
1781
1804
.. _retrieving-the-user-object :
1782
1805
@@ -2534,7 +2557,7 @@ for these events.
2534
2557
services :
2535
2558
# ...
2536
2559
2537
- App\EventListener\CustomLogoutSubscriber :
2560
+ App\EventListener\LogoutSubscriber :
2538
2561
tags :
2539
2562
- name : kernel.event_subscriber
2540
2563
dispatcher : security.event_dispatcher.main
@@ -2551,7 +2574,7 @@ for these events.
2551
2574
<services >
2552
2575
<!-- ... -->
2553
2576
2554
- <service id =" App\EventListener\CustomLogoutSubscriber " >
2577
+ <service id =" App\EventListener\LogoutSubscriber " >
2555
2578
<tag name =" kernel.event_subscriber"
2556
2579
dispatcher =" security.event_dispatcher.main"
2557
2580
/>
@@ -2564,14 +2587,12 @@ for these events.
2564
2587
// config/services.php
2565
2588
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
2566
2589
2567
- use App\EventListener\CustomLogoutListener;
2568
- use App\EventListener\CustomLogoutSubscriber;
2569
- use Symfony\Component\Security\Http\Event\LogoutEvent;
2590
+ use App\EventListener\LogoutSubscriber;
2570
2591
2571
2592
return function(ContainerConfigurator $configurator) {
2572
2593
$services = $configurator->services();
2573
2594
2574
- $services->set(CustomLogoutSubscriber ::class)
2595
+ $services->set(LogoutSubscriber ::class)
2575
2596
->tag('kernel.event_subscriber', [
2576
2597
'dispatcher' => 'security.event_dispatcher.main',
2577
2598
]);
0 commit comments