我正在使用PHP Google客户端库。我成功从用户/谷歌获取令牌并刷新令牌以与API一起使用。 只要用户在Google页面上的Googles设置中撤消了我网站的权限,就会出现以下错误:
Error calling GET https://www.googleapis.com/calendar/v3/users/me/calendarList: (401) Invalid Credentials
这是用户撤销我的权限后的预期行为。 但是,如何检测用户是否已撤消该访问?
目前,我执行以下操作以查看是否可以访问:
//$token json fetched from database
$gclient->setAccessToken($token);
if ($gclient->getAccessToken())
//i should have access
遗憾的是,此代码未检测到已撤销的权限。我该怎么处理?
答案 0 :(得分:2)
一旦检测到用户撤销了该权限,您就可以再次向用户询问授予权限。
要检测授权是否已被撤销:如果您之前已获得授权,则
使用已撤消的access_token
拨打API会导致状态代码为 401 的响应。喜欢这个
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
在撤销后尝试刷新令牌会导致回复 400 状态代码和invalid_grant
消息。正如RFC 6749, Section 5.2
invalid_grant提供的授权许可(例如,授权 代码,资源所有者凭据)或刷新令牌 无效,已过期,已撤销,与重定向不匹配 授权请求中使用的URI,或者发给的URI 另一个客户。
以下是此类回复的示例:
{
"error" : "invalid_grant"
}
答案 1 :(得分:0)
由于缺乏授权,Google API应仅返回401。由于您之前已获得授权,因此接收401是用户已撤销访问权限的可靠指示。
您是否正在寻找在进行API调用之前通知您此类更改的检测机制?今天,Google没有推送通知机制可以通知您应用此类事件。当然,基于拉取的机制没有用 - 您可以简单地进行API调用并更有效地处理401。