Php Google Oauth2:刷新Oauth2令牌时出错,消息:';{“error”:“invalid”u grant}&“x27”;
我在本地主机上运行以下代码,以尝试使用GoogleOAuth2进行身份验证。经过身份验证后,它似乎可以工作一段时间。经过一段时间后,我得到了一个经典错误:Php Google Oauth2:刷新Oauth2令牌时出错,消息:';{“error”:“invalid”u grant}&“x27”;,php,oauth,oauth-2.0,google-oauth,Php,Oauth,Oauth 2.0,Google Oauth,我在本地主机上运行以下代码,以尝试使用GoogleOAuth2进行身份验证。经过身份验证后,它似乎可以工作一段时间。经过一段时间后,我得到了一个经典错误: Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }' 我已经查看了以前将此问题发布到StackOverflow的情况,但建议的解决方案似乎对我不起作用 我相信访问令牌已正确更新(请参阅下面的代码)。我还认为服务器时钟同步正确。我做错了什么 无
Error refreshing the OAuth2 token, message: '{
"error" : "invalid_grant"
}'
我已经查看了以前将此问题发布到StackOverflow的情况,但建议的解决方案似乎对我不起作用
我相信访问令牌已正确更新(请参阅下面的代码)。我还认为服务器时钟同步正确。我做错了什么
无效的授权有两种可能的原因
要解决您的问题,您需要尝试找出上面3个问题中的哪一个导致您的刷新令牌过期。我真的帮不了你什么忙,这需要你做一些侦探工作。一旦你得到了这个,你能用刷新令牌让它再次工作吗?我认为你的刷新令牌不好,你可能想尝试请求一个新令牌。不,这就是问题的全部。刷新令牌似乎停止工作。然后请求一个新令牌错误发生在
$google->refreshToken($token)代码>这是因为刷新令牌不再有效,您需要再次请求授权。这将为您提供一个新的refreshtoken,它将再次工作。我认为第三种情况最有可能,因为我经常重新验证以测试代码。我想我应该用请求中接收到的新刷新令牌替换原始刷新令牌?每次获得新的刷新令牌时,您都应该用这种方式替换存储的刷新令牌,这样您就始终拥有最新的刷新令牌。你知道,当我测试我的应用程序时,我遇到了这个问题,我的脑袋在“为什么是26”!就我而言,问题在于时钟。同步了,现在没事了。
//$token retrieved from database
$token = {"access_token":"xxx.xxx_xxxx-xxx","token_type":"Bearer","expires_in":3600,"refresh_token":"1\/xXxXxxxxxXXXxx","created":145490000}
$google = new Google_Client();
$google->setAccessType('offline');
$google->setClientId($client_id);
$google->setClientSecret($client_secret);
$google->setRedirectUri($client_redirect_uri);
$google->setAccessToken($token);
if($google->isAccessTokenExpired()) {
$google->refreshToken($token);
}
$token = $google->getAccessToken();
$google->setAccessToken($token);
//Some Database code to save the new $token
...
$result = new \Google_Service_YouTube($google);