Как авторизировать 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 отдельным методом (в котором также используется один и тот же идентификатор клиента и секрет, и также устанавливает автономный метод). И чтобы получить авторизацию, я могу добраться до календарей. Это просто недолго …
Существует три типа кодов или токенов, возвращаемых сервером Autogtcation Googles.
Код аутентификации
Когда пользователь нажимает на форму Authentcation и предоставляет доступ к вашему приложению. Google возвращает вам код Authentcation. Вы должны взять этот код и обменять его на токен доступа и токен обновления. Этот код используется только один раз, если вы попытаетесь использовать его снова, вы получите сообщение об ошибке.
invalid_grant: Код уже был выкуплен.
Токен доступа
Ленты доступа используются для доступа к API, этот токен должен быть отправлен вместе с каждым запросом. Токены доступа недолговечны, они работают в течение часа, а затем перестают работать
Обновить токен
Свежие токены должны быть сохранены на вашем сервере в определенном месте. Как только токен доступа истекает, вы можете использовать токен обновления, чтобы получить новый токен доступа.
Ваша проблема заключается в том, что вы сохраняете код аутентификации, который вам бесполезен. Вам нужно найти токен обновления и сохранить его.