PHP Google API Client 缓存访问令牌


PHP Google API Client caching access token

我正在开发一个网络应用程序,为技术不够的用户获取和显示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不会为每个访问令牌创建新的缓存条目。

对我来说

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

工作完美。

我们实现了自己的缓存,它只是将数据放在地板上:

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
    }
}

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

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

为了登录多个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;

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

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

信息:

Google_Client

Google_Cache_Null