У меня есть этот код, который отлично работает при первом входе в систему, но если страница остается открытой, и я не выходил из сеанса, я получаю следующее сообщение и должен перезагрузить браузер, чтобы снова открыть страницу. Как я могу автоматически обновить токен?
Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'The OAuth 2.0 access token has expired, and a refresh token is not available. Refresh tokens are not returned for responses that were auto-approved.'...
Это код
<?php
require_once __DIR__.'/gplus-lib/vendor/autoload.php';
const CLIENT_ID = 'CLIENT_ID';
const CLIENT_SECRET = 'CLIENT_SECRET';
const REDIRECT_URI = 'REDIRECT_URI';
session_start();
$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setRedirectUri(REDIRECT_URI);
$client->setScopes('email');
$plus = new Google_Service_Plus($client);
if (isset($_REQUEST['logout'])) {
session_unset();
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$me = $plus->people->get('me');
// Get User data
$id = $me['id'];
$name = $me['displayName'];
$email = $me['emails'][0]['value'];
$profile_image_url = $me['image']['url'];
} else {
// get the login url
$authUrl = $client->createAuthUrl();
}
?>
<div>
if (isset($authUrl)) {
echo "<a class='login' href='" . $authUrl . "'><img src='gplus-lib/signin_button.png' height='50px'/></a>";
} else { ?>
<!-- Some HTML -->
<?php
}
?>
</div>
Вы не можете перехватить ошибку «Google_Auth_Exception» и сгенерировать новый токен?
Если вы тестируете вызовы Service и Google с этим токеном до входа в систему, вы можете узнать, истек ли срок действия этого токена, и сгенерировать новый токен, если вызов не удался.
Это поток кода авторизации. При запросе authCode вы также должны запросить Offline_Access Запрос.
С этим утверждением вы получите токен обновления вместе с токеном доступа. Затем этот токен обновления можно использовать для получения нового токена каждый раз, когда истекает срок действия токена доступа.
Так что, может быть, когда вы запрашиваете auth_Code, вы должны запросить другую область, которая предоставит вам токен обновления.
А для тестирования вы можете использовать приложение Почтальон. Это даст вам представление о том, какую информацию вы получаете, когда вы запрашиваете различные области.