1

我是 YouTube API 的第一次用户,并且一直在关注文档。但是,当涉及到非基本功能时,该文档非常不清楚,而且似乎没有其他文档供我检查以回答我自己的查询。

让我解释:

我已经实现了 https://developers.google.com/youtube/reporting/guides/authorization/server-side-web-apps#example提供的基本身份验证/令牌示例,它运行良好。

现在,假设访问令牌存储在数据库中而不是会话中(供以后在“离线”数据检索中使用)......我的问题是:

如何检查用户是否已撤销对我的应用程序的访问权限,大概是通过他/她的帐户设置?如果以这种方式撤销它并且我尝试离线使用(现在无效的)访问令牌会发生什么?

更新

不幸的是,它似乎没有回来An error occurred: { error: invalid_grant, error_description: Token has been expired or revoked. }

返回的原始错误是

Uncaught exception 'Google_Service_Exception' with message '{ "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "domain": "global", "reason": "unauthorized" } ], "status": "UNAUTHENTICATED" } }

这可以被抓住,但非常奇怪。如错误所示,我没有无效凭据...我没有授权!

文档严重缺乏这方面。

4

1 回答 1

1

如果用户撤销对您的应用程序的权限,然后尝试使用(现在无效的)访问令牌,An error occurred: { error: invalid_grant, error_description: Token has been expired or revoked. }则将返回该消息。

继续的正确方法是检查是否返回了该错误,如果返回,则重定向用户以再次进行身份验证,以便生成新的访问令牌,并正确授予访问权限。以下面的逻辑为例:

try {

    //request the service

} catch (Exception $e) {        

    if($e->getMessage() == "Token has been expired or revoked"){
        //redirect user to authenticate again
    } 
}
于 2017-03-08T15:20:18.583 回答