基本上,我一直在使用PHP客户端库访问多个用户的gmail收件箱(他们允许通过oAuth2工作流访问)并提取一些数据.
观察:客户机只有在10到15分钟后才能正确地进行身份验证.一旦令牌用于验证用户的gmail收件箱,该用户就可以访问数据。但是,当下一个令牌用于验证另一个用户的gmail收件箱时,PHP客户端不会重新加载而是使用前面的用户(我怀疑它是在会话中缓存/存储的)。
代码流:
<?php
$tokenArray = array();
foreach($tokenArray as $token) {
$googleclient = getGoogleClient($token);
//$googleclient is stale even after the second iteration of the foreach loop
$service = new Google_Service_Gmail($googleclient);
$googleuser = "me";
//if we change the variable $googleuser to some email address "xyz@gmail.com", we get a "Delegation denied for xyz@gmail.com"
$userprofile = $service->users->getProfile($googleuser);
var_dump($userprofile);//same data
}
?>如果我们将其从循环中取出,在25到30分钟后分别进行调用(或重新启动apache we服务器),则在客户端库中正确地使用了第二个令牌。
是因为Google客户端库缓存对象并重用它30分钟,还是我遗漏了什么?
我的问题是,在处理多个令牌时,应该如何重新加载客户机?
是否有适当的方法/任何其他方法来初始化客户端?
你们中有谁有PHP Google客户端库的代码片段吗?我在官方文件里查过了,但没有用.
谢谢你的帮助
发布于 2016-02-27 08:45:47
在我删除了"php客户端库“并从git "git克隆-b v1-master https://github.com/google/google-api-php-client.git”下载了一个新集后,就解决了这个问题。
并链接下载的set...("google-api-php-client/src/Google/autoload.php")中的autoload.php文件。
以前我是用作曲家做的.但是现在我根本没有使用Composer,Google "PHP客户端库“运行得很好.
我也面临新的问题.
google-api-php-client/src/Google/Auth/OAuth2.php‘中的问题1)致命错误:带有消息的未指明的异常'Google_Auth_Exception’无法解码令牌
解决方案:不是传递令牌字符串的关联数组,而是传递令牌字符串。$client->setAccessToken($tokenstring);然后解决它。还要确保json_encode()从$client->getAccessToken()返回的字符串,然后再将它存储在数据库或文件中
问题2)未指明的异常'Google_Auth_Exception‘带有消息’错误获取OAuth2访问令牌,消息:'invalid_grant:代码已被赎回‘。
解决方案:以前,google在调用$client->($code)时似乎将错误消息作为关联数组返回;但是现在它抛出了一个错误.因此,使用try{}catch()处理错误解决了这个问题。
问题2)的来源是firefox的预取功能..。
火狐试图按两次url进行预取,这引发了异常.仍然试图克服(2)问题
https://stackoverflow.com/questions/35655668
复制相似问题