Авторизация google OAuth 2.0 на стороне сервера, как проверить токен? - PullRequest
2 голосов
/ 03 июня 2019

Я не могу проверить идентификатор токена пользователя на стороне сервера. Делал по гиду от гугла https://developers.google.com/identity/sign-in/web/backend-auth

В JS я получаю токен id и отправляю его на сервер

var googleUser = auth2.currentUser.get(),
    id_token = googleUser.getAuthResponse().id_token;

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://api.site.loc//tokensignin');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
      console.log('Signed in as: ' + xhr.responseText);
};
xhr.send('idtoken=' + id_token);

принимаю на сервер

$CLIENT_ID = '.apps.googleusercontent.com';
$id_token = $formData['idtoken'];

$client = new Google_Client(['client_id' => $CLIENT_ID]);
$payload = $client->verifyIdToken($id_token);
if ($payload) {
   $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

в результате я получаю эту ошибку, вместо подтверждения токена

<b>Fatal error</b>:  Uncaught exception 'LogicException' with message 'id_token must be passed in or set as part of setAccessToken' in \google-api-php-client\src\Google\Client.php:717

1 Ответ

1 голос
/ 04 июня 2019

Ошибка произошла из-за того, что $id_token был пуст (ноль). Так что, если у вас есть такая проблема, проверьте, что $id_token правильно

Спасибо Джону Хэнли за помощь

...