1

我正在尝试获取登录的谷歌用户的当前电子邮件 ID。我尝试了类似以下的方法,它在开发模式下工作但在生产模式下不工作。

public class EndpointAPI {

@ApiMethod(httpMethod = HttpMethod.GET, path = "getuser")
public Container getLoggedInUser() {

    UserService userService = UserServiceFactory.getUserService();
    User guser = userService.getCurrentUser();

    Container container = new Container();
    container.user = "user not logged in";

    if (null != guser)
        container.user = guser.getEmail();

    return container;
}

public class Container {
    public String user;
}   
}

我尝试查看文档(并尝试添加客户端 ID、范围等),但无法成功找到我需要做的事情。

如果有人可以发布一个简单的工作示例,将不胜感激。

问候, 沙迪亚

4

1 回答 1

0

最简单的情况是,您应该为 Web 应用程序注册一个客户端 ID,并User在 API 调用的方法签名中请求一个对象。支持来自 JS 客户端请求的示例:

ids.java:

public class Ids {
  public static final String WEB_CLIENT_ID = "12345.apps.googleusercontent.com";
}

MyEndpoint.java:

@Api(clientIds = {Ids.WEB_CLIENT_ID})
public class MyEndpoint {
  public getFoo(User user) throws OAuthRequestException {
    if (user != null) {
      // do something with user
    } else {
      throw new OAuthRequestException("Invalid user.");
    }
  }
}

user将自动填充由传递给您的 API 的令牌所代表的当前用户,或者null在令牌无效或丢失的情况下。当没有有效的用户对象时,上面的示例会引发异常,但您也可以选择允许未经身份验证的访问。

查看文档了解更多信息。

于 2013-04-16T20:05:18.597 回答