1

我想在用Google Oauth 2.0登錄後獲取用戶信息。但是我在1小時後不斷收到錯誤,要求刷新令牌。我不想使用刷新令牌,因爲我已經在線設置訪問類型並且提示自動批准。使用Google Oauth PHP獲取用戶信息而不刷新標記

這是導致問題的代碼,特別是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(); 
    } 

回答

1

Refresh the access token, if necessary.

訪問令牌具有有限的使用壽命(一小時是精確的)。如果您的應用程序需要在單個訪問令牌的生命週期之外訪問Google API,則需要使用刷新令牌來獲取新的訪問令牌。

刷新令牌允許您的應用程序獲取新的訪問令牌。

要回答你的問題,如果你想訪問你的用戶數據超過一個小時,這是不可能做到這一點,使用刷新令牌來獲得新的訪問令牌。

+0

我不需要訪問數據,因爲一旦他們第一次登錄,我將它保存在我的數據庫中。但我假設我不能存儲他們的信息,除非我有離線訪問?有沒有辦法解決這個問題? – jm874327 2015-02-18 19:59:02

+0

所有離線訪問都會向您返回一個refreshToken,以便您可以使用它,而無需再次請求用戶的訪問權限。 – DaImTo 2015-02-18 20:00:56

+0

我的最終目標是不讓用戶繼續授予離線訪問權限並使用上述代碼保存他們的信息。這可能沒有離線訪問? – jm874327 2015-02-18 21:19:44