1

Ich habe versucht, auf Stack Exchange viele Lösungen bereitzustellen, um ein Aktualisierungstoken zu erhalten, und alle schlagen fehl. Unten ist mein ganzer Controller. Wie Sie sehen können, habe ich $ client-> setAccessType ('offline') und $ client-> setApprovalPrompt ('force') eingeschlossen.Google Oauth2-API - Kein Aktualisierungs-Token

Darüber hinaus habe ich den Widerruf-Token viele Male ausgeführt, und ich habe mich in meinem Google-Konto hier (https://myaccount.google.com/permissions), und Zugriff entfernt. Bei keinem dieser Versuche wurde mir ein Aktualisierungs-Token zur Verfügung gestellt, als ich eine neue Autorisierung vorgenommen habe.

<?php 
 
/** 
 
* @file 
 
* Contains \Drupal\hello\GAOauthController. 
 
*/ 
 

 
namespace Drupal\ga_reports_per_user\Controller; 
 

 
use Drupal\Core\Controller\ControllerBase; 
 
use Symfony\Component\HttpFoundation\RedirectResponse; 
 
use Drupal\Core\Routing\TrustedRedirectResponse; 
 
use Google_Client; 
 
use Google_Service_Analytics; 
 
use Drupal\group\Context\GroupRouteContextTrait; 
 

 
class GAOauthController extends ControllerBase { 
 

 
    use GroupRouteContextTrait; 
 

 
    public function authorize($group = NULL) { 
 
    $client = new Google_Client(); 
 
    $credentials_file = \Drupal::service('file_system')->realpath("private://") . '/client_credentials.json'; 
 
    $client->setAuthConfig($credentials_file); 
 
    $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 
 

 
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { 
 
     $protocol = "https"; 
 
    } 
 
    else { 
 
     $protocol = "http"; 
 
    } 
 
    $redirect_uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/finish_google_oauth'; 
 
    $client->setState($group); 
 
    $client->setRedirectUri($redirect_uri); 
 
    $client->setAccessType('offline'); 
 
    $client->setApprovalPrompt('force'); 
 
    $auth_url = $client->createAuthUrl(); 
 
    return new TrustedRedirectResponse($auth_url); 
 
    } 
 

 
    public function finishOauth() { 
 
    if (isset($_GET['code'])) { 
 
     $client = new Google_Client(); 
 
     $credentials_file = \Drupal::service('file_system')->realpath("private://") . '/client_credentials.json'; 
 
     $client->setAuthConfig($credentials_file); 
 
     $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 
 
     if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { 
 
     $protocol = "https"; 
 
     } 
 
     else { 
 
     $protocol = "http"; 
 
     } 
 
     $redirect_uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/finish_google_oauth'; 
 
     $client->setRedirectUri($redirect_uri); 
 
     $client->setAccessType('offline'); 
 
     $client->setApprovalPrompt('force'); 
 
     $client->authenticate($_GET['code']); 
 
     $token = $client->getAccessToken(); 
 
     $refreshToken = $client->getRefreshToken(); 
 
     $client->setAccessToken($token); 
 

 
     $group_entity = \Drupal::entityTypeManager()->getStorage('group')->load($_GET['state']); 
 

 
     $group_entity->field_google_oauth_token->value = $token['access_token']; 
 
     $group_entity->field_google_oauth_token_type->value = $token['token_type']; 
 
     $group_entity->field_google_oauth_token_created->value = $token['created']; 
 
     $group_entity->field_google_oauth_token_expire->value = $token['expires_in']; 
 

 
     $save_status = $group_entity->save(); 
 

 
     return new RedirectResponse('/group/' . $_GET['state']); 
 
    } 
 
    } 
 

 
    public function revoke($group = NULL){ 
 
    $client = new Google_Client(); 
 
    $group_entity = \Drupal::entityTypeManager()->getStorage('group')->load($group); 
 
    $result = $client->revokeToken($group_entity->field_google_oauth_token->value); 
 

 
    $group_entity->field_google_oauth_token->value = ''; 
 
    $group_entity->field_google_oauth_token_type->value = ''; 
 
    $group_entity->field_google_oauth_token_created->value = ''; 
 
    $group_entity->field_google_oauth_token_expire->value = ''; 
 

 
    $group_entity->save(); 
 

 
    return new RedirectResponse('/group/' . $group); 
 

 
    } 
 
}

Antwort

0

Wenn Sie bereits ein Zugriffstoken für diesen Login/dev angefordert. Token Combo, wird es nicht wieder für Sie zurückgeben. Sie müssen den Zugang unter https://myaccount.google.com/permissions widerrufen. Finden Sie Ihre App, widerrufen Sie den Zugriff und versuchen Sie es erneut.

Quelle: Ich hatte genau dieses Problem und nachdem ich mir fast die Haare rausgezogen hatte, fand ich das heraus.

+0

Siehe meinen ursprünglichen Beitrag ... "Darüber hinaus habe ich das Widerrufs-Token viele Male ausgeführt, und ich bin hier in mein Google-Konto gegangen (https://myaccount.google.com/permissions) und den Zugriff entfernt "Bei keinem dieser Versuche wurde mir ein Aktualisierungs-Token zur Verfügung gestellt, als ich eine neue Autorisierung vorgenommen habe." –

+0

Ah, verpasst das. Schade :( –

Verwandte Themen