['onView', EventPriorities::POST_WRITE], KernelEvents::RESPONSE => ['onResponse', EventPriorities::POST_RESPOND], ]; } public function onView(ViewEvent $event): void { $resourceClass = $event->getRequest()->attributes->get('_api_resource_class'); if ($resourceClass !== UserTokenApiResource::class) { return; } $event->getRequest()->attributes->set('authTokenMethod', $event->getRequest()->getMethod()); if ($event->getRequest()->getMethod() === Request::METHOD_POST) { $token = $event->getControllerResult(); $event->getRequest()->attributes->set('authTokenValue', $token->token); } } public function onResponse(ResponseEvent $event): void { $token = $event->getRequest()->attributes->get('authTokenValue'); $method = $event->getRequest()->attributes->get('authTokenMethod'); if (!$method) { return; } switch ($method) { case Request::METHOD_DELETE: $event->getResponse()->headers->clearCookie(AuthService::AUTH_COOKIE_NAME); break; case Request::METHOD_POST: $event->getResponse()->headers->setCookie($this->authService->generateCookie($token)); break; } } }