oauth 2.0 - How to get a refresh_token with an auto-approved response? -


i have following code:

if (isset($_request['logout'])) {   unset($_session['upload_token ']); }  if (isset($_get['code'])) {   $client->authenticate($_get['code']);   $_session['upload_token'] = $client->getaccesstoken();   $redirect = 'http://' . $_server['http_host'] . $_server['php_self'];   header('location: ' . filter_var($redirect, filter_sanitize_url)); }  if (isset($_session['upload_token']) && $_session['upload_token']) {   $client->setaccesstoken($_session['upload_token']);   if ($client->isaccesstokenexpired())   {     echo "the access token expired.<br>"; // debug     $client->refreshtoken(json_decode($_session['upload_token']));     unset($_session['upload_token']);   } } else {   $authurl = $client->createauthurl(); } 

and receiving following error:

uncaught exception 'google_auth_exception' message 'the oauth 2.0 access token has expired, , refresh token not available. refresh tokens not returned responses auto-approved.' 

i assuming getting error because response auto-approved.

what should changed?

update: i've tried adding code:

$client->setaccesstype("online"); $client->setapprovalprompt("auto"); 

based on this question. still receiving same error of missing refresh token.

update: after kroikie's update, code looks following:

$client = new google_client(); $client->setclientid($client_id); $client->setclientsecret($client_secret); $client->setredirecturi($redirect_uri); $client->addscope("https://www.googleapis.com/auth/drive"); $client->setaccesstype("offline"); $client->setapprovalprompt("auto"); $client->setapplicationname("appraisal app"); $service = new google_service_drive($client);  if (isset($_request['logout'])) {   unset($_session['upload_token ']); }  if (isset($_get['code'])) {   $resp = $client->authenticate($_get['code']);   $_session['upload_token'] = $client->getaccesstoken();   $array = get_object_vars(json_decode($resp));   // store , use $refreshtoken new access tokens   $refreshtoken = $array['refreshtoken'];   $redirect = 'http://' . $_server['http_host'] . $_server['php_self'];   header('location: ' . filter_var($redirect, filter_sanitize_url)); }  if (isset($_session['upload_token']) && $_session['upload_token']) {   $client->setaccesstoken($_session['upload_token']);   if ($client->isaccesstokenexpired())   {     echo "the access token expired.  let raph know saw this.<br>";     $client->refreshtoken($refreshtoken);     unset($_session['upload_token']);   } } else {   $authurl = $client->createauthurl(); } 

unfortunately, still receive same fatal error when refresh token needed.

when access type offline, access token , refresh token returned when user first grants data access. access token can used access user's data, , refresh token stored , used new access token when initial access token has expired.

so try using offline access type

$client->setaccesstype('offline'); 

and use refresh token refresh client's access token

// $refreshtoken retrieved response of // user's initial granting access $client->refreshtoken($refreshtoken) 

update: refresh token use like:

if (isset($_get['code'])) {   $resp = $client->authenticate($_get['code']);   $_session['token'] = $client->getaccesstoken();   $array = get_object_vars(json_decode($resp));   // store , use $refreshtoken new access tokens   $refreshtoken = $array['refreshtoken']; } 

Comments

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -