isGranted('ROLE_USER')){ return $this->redirectToRoute('home'); } $id = $this->getParameter('oauth_id'); $secret = $this->getParameter('oauth_secret'); $base = $this->getParameter('oauth_base'); $client = new \OAuth2\Client($id, $secret); if(!$request->query->has('code')){ $url = $client->getAuthenticationUrl($base.'/oauth/v2/auth', $this->generateUrl('user_login', [],UrlGeneratorInterface::ABSOLUTE_URL)); return $this->redirect($url); }else{ $params = ['code' => $request->query->get('code'), 'redirect_uri' => $this->generateUrl('user_login', [],UrlGeneratorInterface::ABSOLUTE_URL)]; $resp = $client->getAccessToken($base.'/oauth/v2/token', 'authorization_code', $params); if(isset($resp['result']) && isset($resp['result']['access_token'])){ $info = $resp['result']; $client->setAccessTokenType(\OAuth2\Client::ACCESS_TOKEN_BEARER); $client->setAccessToken($info['access_token']); $response = $client->fetch($base.'/api/user/me'); $data = $response['result']; $username = $data['username']; $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(['username'=>$username]); if($user === null){ // Création de l'utilisateur s'il n'existe pas $user = new User; $user->setUsername($username); $user->setPassword(sha1(uniqid())); $user->setEmail($data['email']); $user->setLastName($data['nom']); $user->setFirstName($data['prenom']); $manager->persist($user); $manager->flush(); } // Connexion effective de l'utilisateur $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); $tokenStorage->setToken($token); $session->set('_security_main', serialize($token)); $event = new InteractiveLoginEvent($request, $token); $dispatcher->dispatch("security.interactive_login", $event); } // Redirection vers l'accueil return $this->redirectToRoute('default'); } } }