/** * @param Request $request * @param User $user * * @return array */ public function handleOAuthCallback(Request $request, User $user = null) { $oauthVerifier = $request->get('oauth_verifier'); $oauthToken = $request->get('oauth_token'); $temporaryCredentials = $this->session->get('provider/' . $this->getName() . '/temporary_credentials'); $tokenCredentials = $this->oauthClient->getTokenCredentials($temporaryCredentials, $oauthToken, $oauthVerifier); $userDetails = $this->oauthClient->getUserDetails($tokenCredentials); $accessToken = ['identifier' => $tokenCredentials->getIdentifier(), 'secret' => $tokenCredentials->getSecret(), 'username' => $userDetails->nickname]; if (null !== $user) { $user->setProviderAccessToken($this->getName(), $accessToken); } return ['access_token' => $accessToken, 'scope' => null]; }
/** * @param Request $request * @param User $user * * @todo passing $user should not be allowed */ public function handleOAuthCallback(Request $request, User $user = null) { $code = $request->get('code'); $token = $request->get('state'); if (!$this->csrfProvider->isCsrfTokenValid($this->getName(), $token)) { throw new ProviderException('CSRF Mismatch'); } $payload = ['client_id' => $this->getOAuthClientId(), 'client_secret' => $this->getOAuthClientSecret(), 'code' => $code]; $client = clone $this->client; $client->setDefaultOption('headers/Accept', 'application/json'); $request = $client->post($this->getAccessTokenUrl()); $request->setBody(http_build_query($payload)); $response = $request->send(); $data = $response->json(); if (array_key_exists('error', $data)) { $this->logger->error('An error occurred during authentication', ['data' => $data]); throw new ProviderException(sprintf('%s: %s', $data['error'], $data['error_description'])); } if (null !== $user) { $user->setProviderAccessToken($this->getName(), $data['access_token']); $user->setProviderScopes($this->getName(), explode(',', $data['scope'])); } return ['access_token' => $data['access_token'], 'scope' => $data['scope']]; }