예제 #1
0
 /**
  * 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);
     }
 }