/** * Performs OAuth2 auth flow. * @param OAuth2 $client auth client instance. * @return Response action response. * @throws \yii\base\Exception on failure. */ protected function authOAuth2($client) { if (isset($_GET['error'])) { if ($_GET['error'] == 'access_denied') { // user denied error return $this->redirectCancel(); } else { // request error if (isset($_GET['error_description'])) { $errorMessage = $_GET['error_description']; } elseif (isset($_GET['error_message'])) { $errorMessage = $_GET['error_message']; } else { $errorMessage = http_build_query($_GET); } throw new Exception('Auth error: ' . $errorMessage); } } // Get the access_token and save them to the session. if (isset($_GET['code'])) { $code = $_GET['code']; $token = $client->fetchAccessToken($code); if (!empty($token)) { return $this->authSuccess($client); } else { return $this->redirectCancel(); } } else { $url = $client->buildAuthUrl(); return Yii::$app->getResponse()->redirect($url); } }