我正在开发一个网络应用,可以为那些技术不足以自行完成此操作的用户提取和显示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不会创建每个访问令牌的新缓存条目。)
答案 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:
答案 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/
信息: