使用PHP库在离线模式下从Google Calendar API获取refresh_token的问题

时间:2018-02-21 09:25:29

标签: php google-api google-calendar-api

我第一次将帐户与Google日历同步时,我会从API响应中获得如下响应:

{"access_token":"xxx","token_type":"Bearer","expires_in":3600,"refresh_token":"xxx","id_token":"xxx","created":1519204303}

我将此信息保存在ddbb中,然后我可以将我平台中的用户事件与用户的Google日历同步,而不会出现任何问题。

在我的平台中,每个活动都可以与用户的日历同步,问题是如果用户想要将另一个日历与另一个活动同步,那么当我将用户发送到Google授权时,在这种情况下我没有收到来自Google Calendar api回复的refresh_token:

{"access_token":"xxx","token_type":"Bearer","expires_in":3599,"id_token":"xxx","created":1519204379}

所以,我无法在离线模式下使用它。

要点:

用户首次授权使用帐户时,响应良好。如果用户想要同步其他活动,我会再次发送给Google身份验证,因为他可以决定使用其他帐户将日历与活动同步,但如果他决定选择之前选择的Google帐户,则在这种情况下,我会#39 ; m无法接收refresh_token。如果我可以保存帐户ID或其他内容,我可以使用旧的refresh_token信息,但在API响应中我没有收到帐户标识符。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

当用户第一次对您的应用程序进行身份验证时。您将获得访问令牌和刷新令牌。通过刷新令牌,您可以访问用户的Google日历帐户。用户可以访问的所有日历,而不仅仅是其中一个日历。

Google希望您为用户保存刷新令牌。他们不会再向您返回另一个刷新令牌。即使您再次请求对用户进行身份验证,也应使用已保存的那个。如果您想强制提供新的刷新令牌,您可以执行approval_prompt=forcerevoke这将提示用户再次验证您的应用程序并为您提供新的刷新令牌。