我正在开发一个网络应用程序,为技术不够的用户获取和显示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 AppBundleFactory;
use GoogleAuthCacheInterface;
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