Google OAuth 2.0 refresh token for web application with public access

前端 未结 1 528
挽巷
挽巷 2020-12-15 11:57

I\'m getting the following error:

The OAuth 2.0 access token has expired, and a refresh token is not available. Refresh tokens are not returned for re

相关标签:
1条回答
  • 2020-12-15 12:22

    Each access_token expires after a few seconds and need to be refreshed by refresh_token, "Offline access" is what you are looking for. Here you can follow the documentation:

    https://developers.google.com/accounts/docs/OAuth2WebServer#offline

    To obtain a refresh_token you have to run this code only one time:

    require_once 'Google/Client.php';
    
    $client = new Google_Client();
    $client->setClientId('{MY_CLIENT_ID}.apps.googleusercontent.com');
    $client->setClientSecret('{MY_KEY}');
    $client->setRedirectUri('{MY_REDIRECT_URI}');
    //next two line added to obtain refresh_token
    $client->setAccessType('offline');
    $client->setApprovalPrompt('force');
    $client->setScopes(array('https://www.googleapis.com/auth/gmail.readonly'));
    
    if (isset($_GET['code'])) {
        $credentials = $client->authenticate($_GET['code']);  
    
        /*TODO: Store $credentials somewhere secure */
    
    } else {
        $authUrl = $client->createAuthUrl();
        print "<a class='login' href='$authUrl'>Connect Me!</a>";
    }
    

    $credentials includes an access token and a refresh token. You have to store this to obtain new access tokens at any time. So when you wanted to make a call to api:

    require_once 'Google/Client.php';
    require_once 'Google/Service/Gmail.php';
    
    /*TODO: get stored $credentials */
    
    $client = new Google_Client();
    $client->setClientId('{MY_CLIENT_ID}.apps.googleusercontent.com');
    $client->setRedirectUri('{MY_REDIRECT_URI}');
    $client->setClientSecret('{MY_KEY}');
    $client->setScopes(array('https://www.googleapis.com/auth/gmail.readonly'));
    $client->setAccessToken($credentials);
    
    $service = new Google_Service_Gmail($client);
    
    0 讨论(0)
提交回复
热议问题