0

我一直在搜索并阅读 php 库,以找出在第一个初始 oAuth 请求之后进行永久身份验证的最佳方法。

下面的代码似乎工作正常,但我的问题是关于

$client->refreshToken($refresh_token);

编辑:我阅读了更多代码,这似乎不是正确的方法。我尝试在调用时使用我的刷新令牌setAccessToken,但这也不起作用。这在任何地方都有记录吗?

这是设置刷新令牌的正确方法吗?这个令牌会过期吗?

<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$client_id = 'CLIENT ID';
$client_secret = 'CLIENT SECRET';
$refresh_token = 'REFRESH TOKEN';

$client = new Google_Client();

// Get your credentials from the APIs Console
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri('http://redirecturl.com');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setAccessType('offline');
$client->refreshToken($refresh_token);
?>
4

1 回答 1

1

我相信您的呼吁:

$client->refreshToken($refresh_token);

是什么生成您对 Google 的 HTTP 请求以向您颁发另一个访问令牌。它没有设置您的刷新令牌。

您需要将访问令牌和刷新令牌存储在您在第一次请求时获得的数据库或会话中。Google 会发布有限的刷新令牌。

这里有一些关于如何评估您的令牌是否已过期的代码(第 3 个答案):

如何使用 Google API 客户端刷新令牌?

一旦您的访问令牌过期(1 小时),您就可以调用:

$client->refreshToken($refresh_token);

并存储生成的新访问令牌和过期数据。您基本上每小时都会重复此过程。

仅供参考:理论上,刷新令牌“永不”过期。我在自己的编码中发现这不是真的。在长时间不使用 Google API 之后(周末),我感到害怕:

{
"error": "invalid_token",
"error_description": "Invalid Value"
}

我发现我必须通过清除访问和刷新令牌(重置会话或数据库)来解决这个问题,并进行编程调用以撤销过期的访问令牌(ruby)。

GET 'https://accounts.google.com/o/oauth2/revoke?token=' + access_token

然后,您必须从头开始重新启动整个 OAuth2 流程。希望这个问题不会像我一样困扰您!

于 2013-08-22T21:28:07.647 回答