【问题标题】:Can't Validate Google Access Token (wrong number of segments)无法验证 Google 访问令牌(段数错误)
【发布时间】:2017-01-22 23:15:49
【问题描述】:

我有非常简单的代码directly from Google's website

$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...')

有人知道这是为什么吗?

【问题讨论】:

    标签: php google-api jwt google-api-php-client google-api-client


    【解决方案1】:

    回答这个问题是因为另一个问题太短太模糊了。

    不要传递profile.getId()返回的ID,而是传递googleUser.getAuthResponse().id_token返回的ID作为你的id_tokenid字段用于将用户的ID发送到你的服务器的POST请求)。

    给任何开发者的一个很好的提示:如果你认为你做了你应该做的一切,并且它对他们有用,但它对你不起作用,那么你没有做你应该做的一切。

    【讨论】:

    • 这就是答案!谢谢楼主
    • 这不起作用。我用的是 php8.0 API
    【解决方案2】:

    我在POST中传递时使用了access_token而不是id_token

    【讨论】:

    • 我有同样的情况。
    • 你好,我相信@doubleOrt 给出的答案是正确的方法,如果你不介意接受它作为正确答案
    【解决方案3】:

    我遇到了同样的问题,但没有得到任何修复。我不得不改变获取用户信息的方式。我没有使用$client-&gt;verifyIdToken();,而是以这种方式使用了服务类:

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

    所以,为了获取当前用户的电子邮件,我使用了$email=data['email'];

    希望这行得通!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2017-04-29
      • 1970-01-01
      • 2021-12-13
      • 2015-07-16
      • 2011-06-27
      • 2014-05-24
      相关资源
      最近更新 更多