Как разрешить Google Client навсегда, пока пользователь не аннулирует авторизацию?
Я пытаюсь создать приложение, которое подключается к Календарю Google. Он должен работать на PHP, поэтому я использую клиент PHP API Google, предоставляемый google.
Приложение должно иметь автономный доступ, чтобы он работал, когда пользователь не находится в сеансе. Приложение предназначено, чтобы позволить пользователю управлять и отображать свои календари публично на веб-сайтах и т.д.
Я создал учетные данные в Google Консоли, используя метод службы (с идентификатором клиента и секретом клиента). Используя клиент Google API, я также запросил авторизацию у пользователя. Я открываю новое окно браузера, пользователь авторизуется, код авторизации возвращается Google. Я беру этот код, сохраняю его и использую для авторизации клиента, который успешно подключается к Календарю Google и обменивается данными.
Теперь я понял, что это токен, который истекает. Если не использовать автономный доступ, который я установил. Однако через несколько минут или меньше я всегда получаю сообщение об ошибке: Error fetching OAuth2 access token, message: 'invalid_grant: Code was already redeemed.
Это код, который я использую для подключения клиента:
$client = new \Google_Client();
$client->setApplicationName( 'My App' );
$client->setScopes( array( \Google_Service_Calendar::CALENDAR ) );
$client->setClientId( $this->google_client_id );
$client->setClientSecret( $this->google_client_secret );
$client->setRedirectUri( $this->google_client_redirect );
$client->setAccessType( 'offline' );
if ( $code = $this->google_client_auth ) {
try {
$client->authenticate( $code );
} catch( \Exception $e ) {
var_dump( $e );
}
}
return new \Google_Service_Calendar( $client );
Это метод внутри класса.
Идентификатор клиента и секрет клиента хранятся в настройках приложения.
Я также сохраняю код, возвращенный пользователем в настройке, но я думаю, что это именно то, где я делаю это неправильно? Я помещаю ссылку в окно Google OAuth отдельным методом (который также использует один и тот же идентификатор клиента и секрет и также устанавливает автономный метод). И чтобы получить авторизацию, я могу добраться до календарей. Это просто недолго...