Как определить авторизованного пользователя по обратному вызову календаря Google - PullRequest
0 голосов
/ 20 декабря 2018

После того как пользователь получил / разрешил доступ к своему календарю, Google Auth отвечает URL-адресом обратного вызова с кодом.

Допустим, два пользователя пытаются предоставить доступ к своему календарю в в то же время , сервер получит два запроса обратного вызова от Google с кодом.В этом случае, как определить пользователя, от которого получен этот обратный вызов?

Мне нужно хранить access_token и refresh_token вместе с электронной почтой пользователя для синхронизации событий календаря.

Есть идеи?

Ответы [ 2 ]

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

Ниже приведен фрагмент кода

  public void authoriseCode(String code) throws IOException {
    TokenResponse tokenResponse = flow.newTokenRequest(code).setRedirectUri(redirectURI).execute();
    Credential credential = new GoogleCredential().setAccessToken(tokenResponse.getAccessToken());
    Calendar calendar =
        new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
    String email = calendar.calendars().get("primary").execute().getId();
    ...
  }

Другой лучший способ - использовать параметр state .Мы можем передать состояние при отправке запроса, и в ответ API будет содержать состояние.Какой будет идентификатор сеанса или уникальный идентификатор для идентификации фактического запроса.

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

Есть несколько способов сделать это.

Во-первых, вы можете попросить пользователя разрешить поделиться своим адресом электронной почты вместе с информацией календаря.Это решение обсуждается здесь: Google OAuth API для получения адреса электронной почты пользователя? .

Другое, вы можете напрямую проверить access_token и получить идентификатор пользователя таким образом.Вы можете вызвать конечную точку https://developers.google.com/apis-explorer/#search/oauth2/oauth2/v2/oauth2.tokeninfo.Я не уверен, является ли этот идентификатор пользователя адресом электронной почты;это может быть непрозрачный идентификатор, который они используют для представления пользователя.В зависимости от ваших потребностей (вы просто ищете уникальный идентификатор?), Который также может работать для вас.

Наконец, вы всегда можете получить основной календарь пользователя , используя ключевое слово primary , и id этого календаря будет адресом электронной почты пользователя.Это, конечно, хак, но может разблокировать вас сейчас.

...