Google App Engine, как соотнести разные идентификаторы пользователей? - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь связать пользователя в моем API конечных точек Google App Engine с пользователем веб-интерфейса Google App Engine, например, страницей .jsp, требующей аутентификации.

Я могу аутентифицироваться для обоих,но в API конечных точек есть пользователь типа

com.google.api.server.spi.auth.common.User

, тогда как в обработчике приложения пользователь имеет тип:

com.google.appengine.api.users.User

Моя проблема заключается в том, что getUserId() на каждомиз этих двух типов возвращает различное значение.

у каждого есть метод getUserId (), но он отличается для одного и того же пользователя (тот же адрес электронной почты).

Как я могу связатьдва?

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

com.google.api.server.spi.auth.common.User::getUserId() возвращает 114374052554615681603, тот же идентификатор пользователя, что и в моем Google + профиле , в то время как com.google.appengine.api.users.User::getUserId() возвращает 113407138228786534305, что отличается, поэтому я догадываюсь, что первое «правильно», а второе«неправильно».

Я пытался сделать

com.google.appengine.api.users.User currentUser = UserServiceFactory.getUserService().getCurrentUser();

из API, но currentUser - это ноль.

Придя с другой стороны, я мог бы позвонить на https://www.googleapis.com/oauth2/v1/userinfo API для получения профиля со страницы App Engine, но для этого требуется заголовок Авторизация, представляющий вошедшего в систему пользователя, которого у меня нет.

Как я могу жениться на двух, не прибегая к сравнению электронной почтыадрес?

1 Ответ

0 голосов
/ 01 июня 2018

, чтобы немного ответить на мой собственный вопрос, вот что дает мне способ их объединить:

получается, что вы можете, казалось бы, вводить тип пользователя движка приложения, а также тип пользователя API.

@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
public HelloGreeting login(com.google.appengine.api.users.User user) throws InternalServerErrorException, UnauthorizedException {
  if(user == null) {
    throw new UnauthorizedException("You are not logged on!");
  }
String message = String.format("The current app engine user is real! It is %s / %s.", user.getEmail(), user.getUserId());
  return new HelloGreeting(message);
}

Было бы неплохо узнать, возможно ли получить «реальный», то есть профиль Google+, идентификатор пользователя, например, со страницы .jsp или стандартного сервлета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...