Я реализовал этот сценарий двумя способами. Не уверен, что они лучшие или нет, но мне они подходят.
В обоих случаях вам необходимо сохранить токен обновления вместе с идентификатором электронной почты пользователя. Затем вам нужно сделать HTTP-запрос в формате ниже.
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=**<your_client_id>**&
client_secret=**<your_client_secret>**&
refresh_token=**<refresh_token>**&
grant_type=refresh_token
Он вернет access_token и expires_in Источник
Теперь вопрос в том, как и когда делать http-запрос. Так что для этого у меня есть два пути.
1-й
Сохраните адрес электронной почты, токен обновления, токен доступа и текущее время + 3600 секунд. В своей базе данных вы можете запланировать проверку времени истечения каждые 5 минут, и если текущее время любого пользователя достигнет (до 5 или 10 минут) времени истечения, получите токен обновления и обновите значение для этого конкретного пользователя. И во время вызова api просто получите токен доступа пользователя.
2-й
Когда пользователь входит на ваш сайт, получает токен доступа и текущее время + 3600 секунд и сохраняет его в файлах cookie браузера. Теперь, прежде чем выполнять любой вызов api, просто проверьте, меньше ли текущее время (время, когда выполняется вызов api), чем время истечения срока действия (хранящееся в файле cookie). Если это правда, вы можете использовать предыдущий токен доступа, иначе получите новый и снова обновите файл cookie. Также вы должны поставить другое условие, что если файл cookie вообще отсутствует, вам также необходимо получить новый токен обновления.
person
Dev
schedule
18.06.2018