使用Google Oauth PHP获取用户信息,无需刷新令牌

使用Google Oauth PHP获取用户信息,无需刷新令牌,php,oauth-2.0,google-api,google-oauth,google-api-php-client,Php,Oauth 2.0,Google Api,Google Oauth,Google Api Php Client,我想在用户使用Google Oauth 2.0登录后获取他们的信息。但我在1小时后不断收到请求刷新令牌的错误。我不想使用刷新令牌,因为我已将联机和批准提示的访问类型设置为自动 这是导致问题的代码,尤其是get()函数出现错误 $service = new Google_Service_Oauth2($client); if ($client->getAccessToken()) { //For logged in user, get details from

我想在用户使用Google Oauth 2.0登录后获取他们的信息。但我在1小时后不断收到请求刷新令牌的错误。我不想使用刷新令牌,因为我已将联机和批准提示的访问类型设置为自动

这是导致问题的代码,尤其是get()函数出现错误

$service = new Google_Service_Oauth2($client);

if ($client->getAccessToken()) 
    {
          //For logged in user, get details from google using access token
          $user         = $service->userinfo->get();
          $user_id      = $user['id'];
          $user_name        = filter_var($user['name'], FILTER_SANITIZE_SPECIAL_CHARS);
          $first_name       = filter_var($user['given_name'], FILTER_SANITIZE_SPECIAL_CHARS);
          $last_name        = filter_var($user['family_name'], FILTER_SANITIZE_SPECIAL_CHARS);
          $email        = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
          $profile_url      = filter_var($user['link'], FILTER_VALIDATE_URL);
          $profile_image_url    = filter_var($user['picture'], FILTER_VALIDATE_URL);
          $gender       = filter_var($user['gender'], FILTER_SANITIZE_SPECIAL_CHARS);
          $personMarkup     = "$email<div><img src='$profile_image_url?sz=50'></div>";
          $_SESSION['token']    = $client->getAccessToken();
    }
$service=newgoogle\u service\u Oauth2($client);
如果($client->getAccessToken())
{
//对于登录用户,使用访问令牌从google获取详细信息
$user=$service->userinfo->get();
$user_id=$user['id'];
$user\u name=filter\u var($user['name'],filter\u SANITIZE\u SPECIAL\u CHARS);
$first\u name=filter\u var($user['given\u name',filter\u SANITIZE\u SPECIAL\u CHARS);
$last\u name=filter\u var($user['family\u name',filter\u SANITIZE\u SPECIAL\u CHARS);
$email=filter\u var($user['email'],filter\u SANITIZE\u email);
$profile\u url=filter\u var($user['link'],filter\u VALIDATE\u url);
$profile\u image\u url=filter\u var($user['picture'],filter\u VALIDATE\u url);
$gender=filter\u var($user['gender'],filter\u SANITIZE\u SPECIAL\u CHARS);
$personMarkup=“$email”;
$\会话['token']=$client->getAccessToken();
}

访问令牌的生存时间有限(确切地说是一小时)。如果应用程序需要在单个访问令牌的生命周期之外访问Google API,则需要使用刷新令牌来获取新的访问令牌

刷新令牌允许应用程序获取新的访问令牌


要回答您的问题,如果要访问用户数据超过一小时,则不使用刷新令牌获取新的访问令牌是不可能的。

我不需要访问数据,因为他们第一次登录时,我会将数据保存在数据库中。但我假设我不能存储他们的信息,除非我有离线访问权限?有没有办法解决这个问题?脱机访问所做的就是返回一个refreshToken给你,这样你就可以使用它,而无需再次请求用户访问。我的最终目标是不让用户继续授予脱机访问权限,并用上述代码保存他们的信息。如果不进行脱机访问,是否可以执行此操作?保存刷新令牌,您将能够获得一个新的访问令牌来访问数据,而无需再次询问。我认为你应该阅读Oauth的rfc,我认为你误解了一些东西,所以你说一旦使用了刷新令牌,下次用户登录时,它不会要求离线访问吗?