attributes->get('_route'); } public function authenticate(Request $request): Passport { $client = $this->clientRegistry->getClient('oauth'); $accessToken = $this->fetchAccessToken($client); return new SelfValidatingPassport( new UserBadge($accessToken->getToken(), function () use ($accessToken, $client) { /** @var OAuthResourceOwner $userFromToken */ $userFromToken = $client->fetchUserFromToken($accessToken); $existingUser = $this->userRepository->findOneBy(['email' => $userFromToken->getEmail()]); if ($existingUser) { return $existingUser; } $user = new User(); $user->setEmail($userFromToken->getEmail()); $this->em->persist($user); $this->em->flush(); return $user; }) ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): RedirectResponse { $token = $this->JWTManager->create($token->getUser()); $response = new RedirectResponse($this->router->generate('index')); $response->headers->setCookie( new Cookie( 'BEARER', $token, time() + 3600, // expiration '/', null, true, true, false, 'strict' ) ); return $response; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { $message = strtr($exception->getMessageKey(), $exception->getMessageData()); return new Response($message, Response::HTTP_UNAUTHORIZED); } public function start(Request $request, ?AuthenticationException $authException = null): Response { return new RedirectResponse( '/login/oauth', Response::HTTP_TEMPORARY_REDIRECT ); } }