Не удается проверить токен доступа Google (неверное количество сегментов)

У меня очень простой код прямо с сайта Google

$client = new Google_Client(['client_id' => $CLIENT_ID]);

$payload = $client->verifyIdToken($id_token);

if ($payload) {
  $userid = $payload['sub'];
  echo $userid;
} else {
  // Invalid ID token
  echo "error";
}

Я получаю следующие ошибки:

<b>Fatal error</b>:  Uncaught exception 'UnexpectedValueException' with message 'Wrong number of segments' in /../vendor/firebase/php-jwt/src/JWT.php:79
Stack trace:
#0 /../vendor/google/apiclient/src/Google/AccessToken/Verify.php(103): Firebase\JWT\JWT::decode('ya29.GlzbAwEXTe...', '-----BEGIN PUBL...', Array)
#1 /../vendor/google/apiclient/src/Google/Client.php(713): Google_AccessToken_Verify-&gt;verifyIdToken('ya29.GlzbAwEXTe...', '1074005180734-g...')
#2 /../pages/auth/session.php(7): Google_Client-&gt;verifyIdToken('ya29.GlzbAwEXTe...')

Кто-нибудь знает почему это?

3 ответа

Я использовал access_token вместо id_token при передаче его в POST

У меня была та же проблема, и я не получил никакого решения. Мне пришлось изменить способ получения информации о пользователе. Вместо того, чтобы использовать $client->verifyIdToken(); Я использовал класс обслуживания следующим образом:

$authService=new Google_Service_Oauth2($client);
    if($client->getAccessToken()){
        $data=$authService->userinfo->get();
    }

Итак, чтобы получить адрес электронной почты текущего пользователя, я использовал $email=data['email'];,

Надеюсь, это работает!

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

Вместо передачи идентификатора, возвращенного profile.getId()передайте тот, который вернулся googleUser.getAuthResponse().id_token как твой id_token (id поле POST запрос, который вы используете для отправки идентификатора пользователя на ваш сервер).

Отличный совет для любого разработчика: если вы думаете, что сделали все, что должны были сделать, и это работает для них, но не работает для вас, то вы не сделали все, что должны были сделать.

Другие вопросы по тегам