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);
}
}
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." –
Ah, verpasst das. Schade :( –