1

내가 가진 아주 간단한 코드를 확인할 수 없습니다 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...') 

사람이 이유를 알고 있나요을 뭐야? 다른 하나는 너무 짧고 모호하기 때문에이 질문에 대답 POST

답변

0

나는 id_token 대신 access_token이 사용된다.

대신 profile.getId()에 의해 반환 된 ID를 전달하는, 당신의 id_token (당신이 당신의 서버에 사용자의 ID를 보내하기 위해 사용하는 POST 요청의 id 필드)로 googleUser.getAuthResponse().id_token에 의해 반환 된 하나를 전달합니다.

개발자를위한 유용한 정보 : 개발자가해야 할 모든 것을했다고 생각하면 효과가 있지만 작동하지 않습니다. 그렇다면 수행 한 모든 작업을 수행하지 않은 것입니다.

1

나는 동일한 문제가있어 수정하지 못했습니다. 사용자 정보를 가져 오는 방식을 변경해야했습니다. 대신 $client->verifyIdToken();를 사용하는 나는 서비스 클래스 이런 식으로 사용하고 있습니다 : 현재 사용자의 이메일을 얻을, 그래서

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

을, 나는 $email=data['email'];을 사용했다.

희망 작품입니다.