Я использую Google OAuth 2.0 для своего веб-приложения на стороне сервера с помощью PHP 5.4.45 и PHP API для клиентов API API версии 2.1.1.Отсутствует информация из токена идентификатора идентификатора Google в PHP
Я могу успешно обменять authorization code
с refresh_token
, access_token
и id_token
, я могу правильно проверить id_token и извлечь данные пользователя от него, но некоторая информация отсутствует.
Я просил profile
и email
областей, которые, как получить правильно отображаются на экране согласия и настройке приложений пользователя, но, в то время как электронная почта доступна, все претензии, связанные с profile
сферами отсутствуют в id_token (имя , картинка и т. д.).
Я пробовал с разными пользователями, и проблема не устранена.
Это код, я использую (только для целей тестирования):
require_once 'php/libs/google_api_client_library/vendor/autoload.php';
if(!isset($_GET['code'])){
die("code parameter not set");
}else{
//exchange 'code' with access token, refresh token and id token
$data = array(
'code' => $_GET['code'],
'client_id' => $MY_CLIENT_ID,
'client_secret' => $MY_CLIENT_SECRET,
'redirect_uri' => 'https://www.mywebsite.com/oauth2callback.php',
'grant_type' => 'authorization_code'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$response = file_get_contents('https://accounts.google.com/o/oauth2/token', false, stream_context_create($options));
if($response){
$tokens = json_decode($response);
$client = new Google_Client();
//validate idToken and get user info
$idtoken = $client->verifyIdToken($tokens->id_token);
echo "<h1>ID_TOKEN</h1>";
var_dump($idtoken);
}
}
самое странное в том, что он имел обыкновение работать правильно, прежде чем, а потом вдруг стал вести себя так, и я дон Не забудьте внести какие-либо изменения в этот код.
Я также заметил, что это происходит только на стороне сервера, с PHP, потому что все хорошо с клиентской библиотекой JavaScript API.
Любые идеи, почему это происходит?
Сообщите мне, если вам нужна дополнительная информация и спасибо заранее!
Что вы пробовали? –
Я пробовал использовать разные учетные записи Google как в режиме онлайн, так и в автономном режиме «access_type», но ничего не изменилось. Я также пытался включить 'fetch_basic_profile = true' в строку запроса и' openid' в 'scopes', потому что я видел это в некоторых примерах, но не повезло. Я также проверил, что данные, извлеченные из id_token с помощью библиотеки PHP, совпадают с данными, возвращаемыми конечной точкой tokeninfo Google. –