嗨我正在设置离线访问当用户尝试使用google Oauth 2.0登录然后我获得刷新令牌并将其存储到我的数据库中,以便我可以在以后用户使用它而无需用户再次登录我发现该用户可以通过他的谷歌帐户从他的谷歌应用程序撤销我们的应用程序访问权限,之后我们的刷新访问令牌将无效。
所以他们可以在使用之前检查我们的刷新令牌是否有效我决定从谷歌api文档中找到但是找不到任何帮助我只能找到我们可以检查简单的过期时间访问令牌只有1小时有效。
if($client->isAccessTokenExpired())
但是我想检查我的刷新令牌是他们可以检查它的方式,或者google outh 2.0有一些web挂钩,可以在用户撤销我们的应用程序访问时调用我们的URL。
这是我的登录代码
$google_redirect_url = $url;
$client = new \Google_Client();
$client->setAuthConfig('/secret.json');
$client->setRedirectUri($google_redirect_url);
$client->setAccessType('offline'); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->setApprovalPrompt('force');
$client->setScopes(array(
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/youtube.upload'
));
我一直在寻找解决方案,但找不到它。
答案 0 :(得分:3)
你需要考虑你将要做的事情。您希望在尝试刷新访问令牌之前向Google发送请求,询问是否可以使用此刷新令牌。然后,如果Google说你好,那么请使用刷新令牌。
虽然这在理论上可能是一个好主意,毕竟我们都喜欢避免错误。但是,如果刷新令牌不起作用,您所做的就是将您正在做的请求数量增加一倍,以避免出错。你为什么要把你提出的请求数量增加一倍?
您应该做的只是尝试使用刷新令牌,如果失败请求用户再次访问。假设这是自动运行的,只需从数据库中删除刷新令牌,不再尝试自动运行此用户请求。
据说最好的方法和谷歌让我们验证刷新令牌的唯一方法是尝试使用它。您在库中找到的任何方法都可能只是这样做。