Google oauth授权码已过期?

时间:2017-01-12 17:35:00

标签: php oauth google-api google-api-php-client

最后获取除了NULL之外的东西要为访问令牌或刷新令牌返回,我现在收到一条错误,说我的授权令牌已过期。我已尝试在一天的不同时段使用2个不同的Google帐户进行授权,但我会继续获取相同的授权令牌。

如何获得新的有效授权令牌?当我进入帐户设置以删除我正在构建的应用程序的授权访问权限以希望重置它时,它不会被列为授权的应用程序/服务。

这是我的代码:

require_once 'vendor/autoload.php';
$redirect_uri = 'site url';
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->authenticate($_GET['code']);
$refreshToken = $client->getRefreshToken();
var_dump($refreshToken);
$accessToken = $client->getAccessToken();
$aT = $client->fetchAccessTokenWithAuthCode($_GET['code']);
var_dump($accessToken);
var_dump($aT);

最后一行是返回错误的内容。其他var_dump返回NULL。

1 个答案:

答案 0 :(得分:0)

您要进行身份验证的过程不是正确的,或者至少是它看起来的过程。设置客户端配置后,您必须检查是否有访问代码,如果没有访问代码,则将用户重定向到身份验证,并在用户通过身份验证后,重定向用户以执行所需操作。您还缺少应用程序所需的范围,以便获得适当的访问权限。从Google个人资料中的connected apps and sites删除您的应用,然后尝试以下方式:

<?php session_start(); 

//INCLUDE PHP CLIENT LIBRARY
require_once 'vendor/autoload.php';

$scopes = array("email");

// Create client object
$client = new Google_Client(); 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php');
$client->setAuthConfig("client_secrets.json");
$client->addScope($scopes);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');  

if ( isset($_SESSION['access_token']) && $_SESSION["access_token"]){


  $client->setAccessToken($_SESSION['access_token']);

  print_r($_SESSION['access_token']);

  echo "<br>***************************************************************************************************************************************<br>";

  print "Access token creation time: ".date('M d, Y - H:i:s', $_SESSION['access_token']['created']);

  echo "<br>*********************************************************************<br>";

  print "Refresh token: ".$_SESSION['access_token']['refresh_token'];


} else {

    if (!isset($_GET['code'])) {

      $auth_url = $client->createAuthUrl();
      header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));

    } else {

      $client->authenticate($_GET['code']);
      $_SESSION['access_token'] = $client->getAccessToken();

      $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/index.php';
      header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));

    }

}

?>

请不要忘记查看解释授权流程的文档 here