attributes->get('_route'); } public function authenticate(Request $request): Passport { $client = $this->clientRegistry->getClient('openstreetmap'); $accessToken = $this->fetchAccessToken($client); $session = $request->getSession(); $session->set('access_token', $accessToken); return new SelfValidatingPassport( new UserBadge($accessToken->getToken(), function () use ($accessToken, $client) { $resourceOwner = $client->fetchUserFromToken($accessToken); $existingUser = $this->entityManager->getRepository(User::class)->findOneBy(['osmId' => $resourceOwner->getId()]); if ($existingUser) { return $existingUser; } $user = new User(); $user->setOsmId($resourceOwner->getId()); $user->setUsername($resourceOwner->getDisplayName()); $this->entityManager->persist($user); $this->entityManager->flush(); return $user; }) ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return null; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return null; } public function start(Request $request, ?AuthenticationException $authException = null): Response { return new RedirectResponse( '/', Response::HTTP_TEMPORARY_REDIRECT ); } }