Авторизуйте области после обновления учетных данных и доступа приложения к учетной записи Google - PullRequest
0 голосов
/ 22 декабря 2018

Вот моя проблема.

Я разрабатываю веб-приложение с помощью движка приложений Google в JAVA.

Я искал в Интернете и видел много разных ответов на мою проблему., предлагая различные решения, но ни одно из них не помогло мне, я все еще получаю:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

Я пытаюсь отправить письмо из своего аккаунта на другие адреса электронной почты (от меня для меня в качестве теста).Я успешно реализовал API листов, но вспомнил, что сначала мне нужно было пройти через экран согласия, но теперь я действительно не знаю, как снова вызвать этот экран для постоянной проверки областей. Позвольте мне объяснить.

IУ меня есть два файла учетных данных.

  1. для получения информации о пользователях для подтверждения входа в систему через Google, здесь я использую URL-адрес подключения openID, и там у меня появляется экран согласия.
  2. используется API Sheetsи Gmail API как «я», чтобы сначала получать данные из моих электронных таблиц и отправлять почту с моего адреса электронной почты.Как было сказано ранее, я проверил API Sheets, но не могу заставить Gmail работать с теми же учетными данными.

Я протестировал различные области, но безуспешно добавил еще один файл учетных данных.Пожалуйста, скажите мне, если вам нужен какой-то код.

РЕДАКТИРОВАТЬ

Просто удалил мои учетные данные API листов и удалил мое приложение для привязки к моей учетной записи, и теперь я не могу получитьэкран согласия для всплывающего окна.и я получаю:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "invalid_grant",
  "error_description" : "Token has been expired or revoked."
}

Я использую этот код для получения учетных данных

private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStreamReader in = new InputStreamReader(new FileInputStream(new File("WEB-INF/credentials.json")));
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, in);

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}

, но в документации Google говорится:

Информация об авторизации хранится нафайловая система, поэтому последующие выполнения не будут запрашивать авторизацию.

Где я могу удалить сохраненную файловую систему?

Любая помощь очень ценится

1 Ответ

0 голосов
/ 23 декабря 2018

Поработав вокруг часов и часов, я наконец-то нашел необъяснимое решение.

Я удаляю свое приложение из этой страницы

, затем меняю код на

return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");

на этот

return new AuthorizationCodeInstalledApp(flow, receiver).authorize(null);

для отображения экрана согласия.

затем я, после проверки своего приложения, получаю ошибку NullPointerException, поэтому я перехожу обратнострока к этому

return new AuthorizationCodeInstalledApp(flow, receiver).authorize("myemail@gmail.com");

и если это не работает (я думаю, что это проблема с кэшем)

к этому

return new AuthorizationCodeInstalledApp(flow, receiver).authorize("me");

не спрашивайте меня, почемуно это сработало.Еще более подробная информация об этом поведении приветствуется.

...