2015-07-07 3 views
0

В моем приложении я включил как google, так и facebook oauth. Сначала я инициировал класс для Google, как этотfacebook google oauth Неоткрытое исключение

$client = new Google_Client(); 
$client->setApplicationName("urmk google login");   
$oauth2 = new Google_Oauth2Service($client); 
if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
    return; 
} 

процесса входа в систему Google работает отлично, и я могу получить информацию о пользователе тоже. Но Тогда я интегрированный facebook OAuth

  FacebookSession::setDefaultApplication('APP_ID', 'APP_SECRET'); 
      $helper = new FacebookRedirectLoginHelper('http://example.com/'); 
      $loginUrl = $helper->getLoginUrl(); 
      try { 
      $session = $helper->getSessionFromRedirect(); 
      } catch(FacebookRequestException $ex) { 
      // When Facebook returns an error 
      } catch(\Exception $ex) { 
      // When validation fails or other local issues 
      } 
      if ($session) { 
      // Logged in 
      $user = $facebook->getUser(); 
      if ($user) { 
       try { 
        $user_profile = $facebook->api('/me'); 
       } catch (FacebookApiException $e) { 
        error_log($e); 
        $user = null; 
       } 
      } 

      if ($user) { 
       $logoutUrl = $facebook->getLogoutUrl(); 
      } else { 
       $loginUrl = $facebook->getLoginUrl(); 
      } 

      } 

Он успешно принимает меня к учетной записи пользователя, где он просить разрешения пользователя, но в то время как перенаправлять на мой сайт он выдает ошибку о том,

Fatal error: Uncaught exception 'Google_AuthException' with message 
    'Error fetching OAuth2 access token, message: 'invalid_grant'' in 
    C:\xampp\htdocs\urmk\lib\src\auth\Google_OAuth2.php:113 Stack trace: 
    #0 C:\xampp\htdocs\urmk\lib\src\Google_Client.php(131): 
    Google_OAuth2->authenticate(Array, 'AQASSzhhLhYIYxI...') #1 
    C:\xampp\htdocs\urmk\index.php(66): 
    Google_Client->authenticate('AQASSzhhLhYIYxI...') #2 {main} thrown in 
    C:\xampp\htdocs\urmk\lib\src\auth\Google_OAuth2.php on line 113** 

И снова, если i измените значение if (isset ($ _ GET ['code'])) до if (isset ($ _ GET ['something else'])). Он работает нормально. Итак, как решить эту ошибку. Любая помощь будет оценена по достоинству.

+0

Фаза I: Исправить исключение. – Ray

ответ

0

Я считаю, что проблема заключается в том, что у вас есть параметры в вызове функции «authenticate». Из того, что я увидел в коде Google для «Google_OAuth2.php», он вызывает его сам. Вам нужно будет убедиться, что вы установите переменные. Ознакомьтесь с приведенным ниже кодом.

Также убедитесь, что вы используете правильную версию кода Google ... Онлайн или Установленный. Я прочитал, что установленная версия является родной.

if(isset($_GET['code'])) 
{ 
    $client->authenticate(); 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
} 

Вы можете установить маркер доступа по ...

if(isset($_SESSION['access_token'])) 
{ 
    $client->setAccessToken($_SESSION['access_token']); 
} 

Если все остальное терпит неудачу, то прочитайте этот документ ... http://25labs.com/tutorial-implementing-google-api-using-oauth-2-0-in-php/

Кроме того, поймать исключение, так что вы можете в по крайней мере, получить одну или другую как успешную проверку подлинности, а не обходить все вместе.

Смежные вопросы