我正在使用Google API Client Library for PHP进行离线身份验证,但当我使用以下代码时:
$this->google->refreshToken($result["google_refresh_token"]));
则返回NULL。$this->google
是指Google_Client类的示例。
有人知道这是什么吗?
如果我尝试更改给定的刷新令牌,它会返回一个Google异常错误,因此它应该是一个有效的令牌。
谢谢大家!
编辑:
'client_id' => 'myclientid',
'client_secret' => 'myclientsecret',
'redirect_uri' => 'mypage',
'developer_key' => 'mydeveloperkey',
// Other parameters.
'access_type' => 'offline',
'approval_prompt' => 'force',
也许这个对你有帮助
5条答案
按热度按时间hsvhsicv1#
我有这个同样的问题很长一段时间.对我来说,这是因为,出于某种原因,谷歌只发送你的刷新令牌,你第一次请求令牌.所以你必须确保你存储的刷新令牌为该用户的所有的整体,因为谷歌不会再给予你.
对于开发来说,这可能是一个真实的的痛苦。您可以让Google向您发送新的刷新令牌,但您必须做的是取消授权您通过应用程序授权的任何帐户。您可以在your Google security settings.中完成此操作。
希望这有帮助!
juud5qan2#
我现在使用一个非常简单的方法来避免使用
refresh_token()
方法。我只是保存第一个请求的整个JSON响应,并将其交给setAccesToken()
方法。如果访问令牌过期,它将自动从给定的JSON中获取一个新的。dtcbnfnu3#
我也遇到过类似的问题。查看我的详细答案here
这里是快速解决方案
8ftvxx2r4#
我的头撞在墙上很长一段时间。
这一点并不明显,但:
define('CREDENTIALS_PATH', '/vendor/google/credentials/credentials.json');
引用“credentials.json”或任何您的凭证文件将被称为的行-这个文件在您开始时不应该存在!如果您在获得授权之前创建了该文件-删除它,然后访问您的脚本页面-
quickstart.php
或其他,然后它会要求您授权。如果您尝试一遍又一遍地刷新页面,则存在使用限制(即请求授权次数过多),因此您可能需要在开发人员控制台中创建新的client_id并更新
define('CLIENT_SECRET_PATH')
路径。然后我补充说:
t3irkdon5#
我也有类似的问题,但是对于最新版本的PHP google apiclient库,当我将其更改为2.0时,一切都正常工作。
“google/apiclient”:“^2.0”,
现在我需要做的就是检查token是否处于活动状态,如果不是,然后请求一个新的token,作为响应,我会得到一个新的token和一个新的refreshtoken,我保存它以下载另一个token,依此类推。这是我的示例代码: