0

我正在尝试将我的 Google App Engine Endpoints API 中的用户与 Google App Engine Web 前端的用户相关联,例如需要身份验证的 .jsp 页面。

我可以对两者进行身份验证,但 Endpoints API 有一个用户类型

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

在应用引擎中,用户属于以下类型:

com.google.appengine.api.users.User

我的问题是getUserId()这两种类型中的每一种都返回不同的值。

每个都有一个方法 getUserId(),但对于同一个用户(相同的电子邮件地址)来说是不同的。

我如何将两者联系起来?

显然我可以使用电子邮件地址,但最佳实践表明最好不要这样做,因为用户可以有效地更改他们的电子邮件地址(或有多个)。

返回 114374052554615681603,与我的Google+ 个人资料上的com.google.api.server.spi.auth.common.User::getUserId()用户 ID 相同,而返回 113407138228786534305,这是不同的,所以我的直觉是前者是“正确的”,而后者是“错误的”。com.google.appengine.api.users.User::getUserId()

我试着做

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

来自 API,但currentUser为空。

从另一种方式来看,我可以调用https://www.googleapis.com/oauth2/v1/userinfo API 以从 App Engine 页面获取配置文件,但这需要一个 Authorization 标头,代表已记录在用户上,我没有。

我怎样才能在不比较电子邮件地址的情况下将两者结合起来?

4

1 回答 1

0

为了稍微回答我自己的问题,以下为我提供了一种将它们结婚的方法:

事实证明,您似乎可以注入应用引擎用户类型以及 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);
}

仍然很高兴知道是否有可能从 .jsp 页面或标准 servlet 中获取“真实”,即 Google+ 个人资料、用户 ID。

于 2018-06-01T17:03:25.310 回答