【发布时间】:2014-01-01 04:07:18
【问题描述】:
我有一个基于 Web 的应用程序,它使用 Google OAuth2.0 作为登录框架。直到昨天为止,它都可以正常工作。访问令牌过期后,应用程序无法获取刷新令牌。除此之外,“请求许可”页面已更改为“离线访问”,而不是“知道您在 Google 上的身份”和“查看您的电子邮件”
最初,“请求许可”页面将请求访问“了解您在 Google 上的身份”和“查看您的电子邮件”。用户注销并尝试第二次登录后,“请求权限”页面也将相同。
但是,直到昨天,“请求权限”页面更改为“具有离线访问权限”。访问令牌过期后,我收到以下错误消息:
PHP 致命错误:未捕获的异常 'Google_AuthException' 带有消息“OAuth 2.0 访问令牌已过期,并且刷新令牌不可用。自动批准的响应不会返回刷新令牌。在 /home2/xxxx/public_html/test/google-api-php-client/src/auth/Google_OAuth2.php:221
我试过 $client->setAccessType('online'); 。但是,我仍然遇到这个致命错误。下面是我获取访问令牌的代码:
if ($client->getAccessToken()) {
$token = $client->getAccessToken();
$authObj = json_decode($token);
$refreshToken = $authObj->refresh_token;
$user = $oauth2->userinfo->get();
$me = $plus->people->get('me');
$email = filter_var($user['email'], FILTER_SANITIZE_EMAIL); // get the USER EMAIL ADDRESS using OAuth2
$optParams = array('maxResults' => 100);
$activities = $plus->activities->listActivities('me', 'public', $optParams);
$_SESSION['access_token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
}
我试图搜索与我类似的问题,但找不到。这是从昨天开始发生的。在此之前,我从未对代码进行任何更改。
【问题讨论】:
-
据我所知,他们稍微改变了他们的安全管理。如果您现在授予对应用程序的访问权限,Google 会在未来知道您请求的权限并保存它们,并且只会再次询问您是否想要获得新权限或离线访问权限。我认为,这是他们更新系统时的临时错误,因为我现在没有遇到任何问题。
-
更新:你说得对,我也不能再使用刷新令牌了……
-
你能告诉我如何摆脱这个吗?
标签: oauth-2.0 access-token google-oauth