PHP Google API客户端缓存访问令牌

时间:2016-02-16 19:11:39

标签: php api caching google-analytics

我正在开发一个网络应用,可以为那些技术不足以自行完成此操作的用户提取和显示Google Analytics数据。

要做到这一点,我:

1)让用户使用OAuth登录

2)存储访问令牌

3)创建一个Google_Client并为其提供此访问令牌

4)使用此Google_Client获取分析数据

这对第一个用户没有问题。但是,它失败了第二个用户的“拒绝访问”响应。通过PHP代码,我发现这是因为Google API客户端缓存了原始访问令牌(在/ var / tmp / google-api-php-client的文件系统中),并使用此代码而不是全新访问权限我提供的令牌。

如何阻止Google API客户端缓存文件系统中的访问令牌?

(关于Google_Client正在使用的缓存的背景信息:当您提供访问令牌时,它会使用从令牌范围派生的密钥存储它。由于访问令牌更改时范围保持不变,因此Google_Client不会创建每个访问令牌的新缓存条目。)

4 个答案:

答案 0 :(得分:1)

对我来说:

$client = \Google_Client();
//...        
$client->getCache()->clear();
$client->setAccessToken($access_token);

工作得很好。

答案 1 :(得分:0)

我们实现了自己的缓存,只是删除了数据:

namespace AppBundle\Factory;

use Google\Auth\CacheInterface;

class NullGoogleCache implements CacheInterface
{

    public function get($key, $expiration = false)
    {
        return false;
    }

    public function set($key, $value)
    {
        //do nothing
    }

    public function delete($key)
    {
        //do nothing
    }
}

答案 2 :(得分:0)

Google建议在其Github页面上使用“另一个缓存库”,例如StashPHP:

https://github.com/google/google-api-php-client#caching

答案 3 :(得分:-1)

要登录多个Google Analytics帐户,您可以将Google_Client缓存设置为Google_Cache_Null

Google_Client $client = new Google_Client();
....
$googleCache = new Google_Cache_Null();
$client->setCache($googleCache);

不要忘记添加(根据您的设置调整)

use Google_Client;
use Google_Cache_Null;

您可以使用以下命令检查默认的Google缓存目录(ubuntu):

$ ls /temp/google-api-php-client/

信息:

Google_Client

Google_Cache_Null