I'm working on a PHP web application that creates Google contacts after the user has authorized permission. I dont want to prompt the user everytime new contact is created, so I found this: https://developers.google.com/identity/protocols/oauth2/web-server#offline
If your application needs offline access to a Google API, set the API client's access type to offline:
$client->setAccessType("offline");
After a user grants offline access to the requested scopes, you can continue to use the API client to access Google APIs on the user's behalf when the user is offline. The client object will refresh the access token as needed.
So if I read this correctly the client automatically refreshes access token without me doing anything?
After performing every operation using the Google Client the access token is not there when I use $this->client->getAccessToken(). If I var_dump it always will come out as NULL. What should I be doing so that the client refreshes the access token automatically?? Here is the enterity of my code, you'll see its not too complex
My model
class PeopleModel{
protected $client;
public function __construct(){
$this->client = new Google_Client();
$this->client->setAuthConfig('credentials.json');
$this->client->setScopes(Google_Service_PeopleService::CONTACTS);
$this->client->setRedirectUri('my url');
$this->client->setAccessType('offline');
$this->client->setPrompt('consent');
$this->client->setApprovalPrompt('auto');
$this->client->setIncludeGrantedScopes(true);
}
public function getClient(){
return $this->client;
}
}
My controller
class GooglePeople extends Controller{
protected $client;
public function __construct(){
$this->client = new PeopleModel();
$this->client = $this->client->getClient();
// we get code from the google auth page
if( isset($_GET['code']) ){
$token = $this->client->fetchAccessTokenWithAuthCode($_GET['code']);
$acc_token = $this->client->getAccessToken();
$this->client->setAccessToken($acc_token);
}
}
public function index(){
// we get code from the google auth page or the client as an acc token
if (isset($_GET['code']) || $this->client->getAccessToken()) {
// ... Do stuff with the PeopleService. So far no errors here
}else{ // we redirect to google auth page to get auth code
$auth_url = $this->client->createAuthUrl();
if(!header('Location: '.filter_var($auth_url,FILTER_SANITIZE_URL))){
exit('Header error');
}
}
}
}
I'm being redirected everytime because $this->client->getAccessToken() is NULL. Can anyone give me a hint??