【问题标题】:Oauth : Where to get userId for AuthorizationCodeFlow . createAndStoreCredential?Oauth:在哪里获取 AuthorizationCodeFlow 的 userId。 createAndStoreCredential?
【发布时间】:2016-04-15 00:46:35
【问题描述】:

我从事 google app 项目,但在使用 java oauth 库(1.10.1-beta)时遇到了一些困难。

我密切关注:http://code.google.com/p/google-oauth-java-client/wiki/OAuth2#Authorization_code_flow

问题是我不知道应该从哪里获取 userId 或 userEmail。我知道有 userinfo API,但我实际上是在尝试创建凭据,所以我无法访问 userinfo API AFIAK。

我的应用程序在 localhost 上运行良好(因为 test@example.com 用户总是在那里),但在 google 引擎环境中部署时失败了(NullPointerException user.getUserId())。

// we ask for token because we got authCode
GoogleTokenResponse gTokenResponse = userUtils.getFlow().newTokenRequest(authCode).setRedirectUri(userUtils.getRedirectUri()).execute();

//trying to search for user email / id /  whatever
User user = UserServiceFactory.getUserService().getCurrentUser();

//user is null -> nullPointerException is thrown 
userUtils.getFlow().createAndStoreCredential(gTokenResponse, user.getUserId());

您能否指出我的用例中的一个缺陷或给我一个提示?我在 SDK 示例、Stackoverflow 和这里搜索了很多,但实现的并不多。

PS:在 AuthorizationCodeFlow.createAndStoreCredential(...) 方法中,只有当您为凭据使用持久存储并且是的我正在使用它时,userId 才是强制性的,所以在我的情况下,userId 不能为空。

谢谢。

【问题讨论】:

    标签: java google-app-engine oauth-2.0 credentials


    【解决方案1】:

    在识别用户(身份验证)之前,您正在执行 OAUTH(授权)。您必须在用户未登录时将其重定向到登录页面:

    UserServiceFactory.getUserService().getCurrentUser() == null
    

    您可以通过将用户重定向到 loginUrl 来做到这一点:

    String loginUrl = userService.createLoginURL(request.getOriginalRef().toString());
    

    用户下次访问你的应用时,他会登录,你可以询问用户ID。

    【讨论】:

    • 但是给定的代码在用户授予应用程序访问权限后运行,因此在这种情况下应用程序必须知道谁登录了谷歌帐户。
    • 如果 UserServiceFactory.getUserService().getCurrentUser() == null 那么恐怕用户没有登录到他的谷歌帐户
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多