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 = $userManager->findUserByUsername($username); if($user === null){ // Création de l'utilisateur s'il n'existe pas $user = $userManager->createUser(); $user->setUsername($username); $user->setPlainPassword(sha1(uniqid())); $user->setEnabled(true); $user->setEmail($data['email']); $user->setNom($data['nom']); $user->setPrenom($data['prenom']); $userManager->updateUser($user); } // 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'); } } }