使用Google Oauth PHP获取用户信息,无需刷新令牌
我想在用户使用Google Oauth 2.0登录后获取他们的信息。但我在1小时后不断收到请求刷新令牌的错误。我不想使用刷新令牌,因为我已将联机和批准提示的访问类型设置为自动 这是导致问题的代码,尤其是get()函数出现错误使用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
$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,我认为你误解了一些东西,所以你说一旦使用了刷新令牌,下次用户登录时,它不会要求离线访问吗?