基本上,我一直在使用PHP Google API客户端库来访问多个用户的gmail收件箱(他们允许通过oAuth2工作流程访问)并提取一些数据......
观察: 客户仅在10到15分钟后才能正确验证身份... 一旦使用令牌验证用户的gmail收件箱,该用户就可以访问数据。但是当下一个令牌用于验证另一个用户的gmail收件箱时,PHP google api客户端不会重新加载,而是使用前一个用户(我怀疑它已被缓存/存储在会话中)。
代码流程
<?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 webserver),则第二个令牌将在客户端库中正确使用。
是因为Google API PHP客户端库正在缓存该对象并重新使用它30分钟,还是我错过了什么?
我的问题是在处理多个令牌时我应该怎么做才能重新加载客户端?
是否有正确的方式/任何其他方式来初始化客户端?
你们是否有任何PHP Google API客户端库的代码片段...我已在官方文档中检查过它但无济于事...
感谢您的帮助
答案 0 :(得分:0)
在我删除了“php客户端库”并从git“ git clone -b v1-master https://github.com/google/google-api-php-client.git 下载了一套新软件后,此问题得以修复 “
并链接了已下载集合中的autoload.php文件...(“ google-api-php-client / src / Google / autoload.php ”)
以前我使用Composer来构建它......但是现在我根本没有使用Composer,Google API“PHP Client Library”工作得很好......
我也面临新问题......
问题1)致命错误:在google-api-php-client / src / Google / Auth / OAuth2.php中显示消息'Google_Auth_Exception'并显示消息'无法json解码令牌'
解决方案:而不是传递令牌字符串的关联数组,而不是传递令牌字符串... $ client-&gt; setAccessToken($ tokenstring);然后它就解决了。还要确保json_encode()从$ client-&gt; getAccessToken()返回的字符串;在将其存储在数据库或文件中之前
问题2)未捕获的异常“Google_Auth_Exception”,并显示消息“获取OAuth2访问令牌时出错,消息:'invalid_grant:代码已被兑换。'
解决方案:之前,当我们调用$ client-&gt; authenticate($ code)时,google api似乎将错误消息作为关联数组返回;但现在它抛出一个错误......所以使用try {} catch()进行错误处理解决了问题
问题的根源2)是firefox的预取功能...
firefox尝试两次点击网址进行预取,并提出异常...... 仍在尝试克服问题(2)