@@ -1154,18 +1154,42 @@ In some cases you need to execute extra logic upon logout (e.g. invalidate
1154
1154
some tokens) or want to customize what happens after a logout. During
1155
1155
logout, a :class: `Symfony\\ Component\\ Security\\ Http\\ Event\\ LogoutEvent `
1156
1156
is dispatched. Register an :doc: `event listener or subscriber </event_dispatcher >`
1157
- to execute custom logic. The following information is available in the
1158
- event class:
1157
+ to execute custom logic::
1159
1158
1160
- ``getToken() ``
1161
- Returns the security token of the session that is about to be logged
1162
- out.
1163
- ``getRequest() ``
1164
- Returns the current request.
1165
- ``getResponse() ``
1166
- Returns a response, if it is already set by a custom listener. Use
1167
- ``setResponse() `` to configure a custom logout response.
1159
+ // src/EventListener/LogoutSubscriber.php
1160
+ namespace App\EventListener;
1168
1161
1162
+ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1163
+ use Symfony\Component\Security\Http\Event\LogoutEvent;
1164
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1165
+ use Symfony\Component\HttpFoundation\RedirectResponse;
1166
+
1167
+ class LogoutSubscriber extends AbstractController implements EventSubscriberInterface
1168
+ {
1169
+ public static function getSubscribedEvents()
1170
+ {
1171
+ // return the subscribed events, their methods and priorities
1172
+ return [
1173
+ LogoutEvent::class => ['logout', 0],
1174
+ ];
1175
+ }
1176
+
1177
+ public function logout(LogoutEvent $event)
1178
+ {
1179
+ // Returns the security token of the session that is about to be logged out:
1180
+ $event->getToken();
1181
+
1182
+ // Returns the current request:
1183
+ $request = $event->getRequest();
1184
+
1185
+ // Returns a response, if it is already set by a custom listener:
1186
+ $response = $event->getResponse();
1187
+
1188
+ // Configure a custom logout response:
1189
+ $response = new RedirectResponse($this->generateUrl('homepage', []), RedirectResponse::HTTP_SEE_OTHER);
1190
+ $event->setResponse($response);
1191
+ }
1192
+ }
1169
1193
1170
1194
.. tip ::
1171
1195
@@ -1185,7 +1209,7 @@ event class:
1185
1209
services :
1186
1210
# ...
1187
1211
1188
- App\EventListener\CustomLogoutSubscriber :
1212
+ App\EventListener\LogoutSubscriber :
1189
1213
tags :
1190
1214
- name : kernel.event_subscriber
1191
1215
dispatcher : security.event_dispatcher.main
@@ -1202,7 +1226,7 @@ event class:
1202
1226
<services >
1203
1227
<!-- ... -->
1204
1228
1205
- <service id =" App\EventListener\CustomLogoutSubscriber " >
1229
+ <service id =" App\EventListener\LogoutSubscriber " >
1206
1230
<tag name =" kernel.event_subscriber"
1207
1231
dispacher =" security.event_dispatcher.main"
1208
1232
/>
@@ -1215,14 +1239,12 @@ event class:
1215
1239
// config/services.php
1216
1240
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
1217
1241
1218
- use App\EventListener\CustomLogoutListener;
1219
- use App\EventListener\CustomLogoutSubscriber;
1220
- use Symfony\Component\Security\Http\Event\LogoutEvent;
1242
+ use App\EventListener\LogoutSubscriber;
1221
1243
1222
1244
return function(ContainerConfigurator $configurator) {
1223
1245
$services = $configurator->services();
1224
1246
1225
- $services->set(CustomLogoutSubscriber ::class)
1247
+ $services->set(LogoutSubscriber ::class)
1226
1248
->tag('kernel.event_subscriber', [
1227
1249
'dispatcher' => 'security.event_dispatcher.main',
1228
1250
]);
0 commit comments