我已经在Java中使用Google OAuth API实现了三条腿的OAuth。
我的应用程序已在GAE上注册。我成功地获取了访问令牌。但是,现在当我创建UserService对象时,即使我已经登录Gmail和我的个人域邮件,调用getCurrentUser()时它返回null!
我的代码如下:
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope("https://spreadsheets.google.com/feeds/");
oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);
oauthParameters.setOAuthToken(request.getSession().getAttribute("oauth_token").toString());
oauthParameters.setOAuthTokenSecret(request.getSession().getAttribute("oauth_token_secret").toString());
UserService userService = UserServiceFactory.getUserService();
out.println("<br/>Get Current User : " + userService.getCurrentUser());
使用用户服务时不需要特别添加任何JAR包。那么问题出在哪里呢?
当我尝试这样做时:
out.println(userService.isUserLoggedIn() ? "User is Logged In" : "User is Log Off");
输出结果为:
用户已注销
当我登录到我的个人域名和Gmail时! 我认为,如果我已经注销,则应该将我重定向到登录页面。 但是它没有!
此外,根据这里和systempuntout答案所述,如果我尝试:
OAuthService oauth = OAuthServiceFactory.getOAuthService();
User user = oauth.getCurrentUser();
out.println("<br/>Get Current User : " + user.getNickname());
然而,它停止了执行!:(
我在Google App Engine日志中遇到了以下错误:
Oauth.requestServlet doGet: null
com.google.appengine.api.oauth.InvalidOAuthParametersException: Unknown
at com.google.appengine.api.oauth.OAuthServiceImpl.makeSyncCall(OAuthServiceImpl.java:73)
at com.google.appengine.api.oauth.OAuthServiceImpl.getGetOAuthUserResponse(OAuthServiceImpl.java:53)
at com.google.appengine.api.oauth.OAuthServiceImpl.getCurrentUser(OAuthServiceImpl.java:28)
at Oauth.accessFeeds.access(accessFeeds.java:60)
at Oauth.requestServlet.processRequest(requestServlet.java:129)
at Oauth.requestServlet.doGet(requestServlet.java:199)
参考资料:使用用户服务 APIs:com.google.appengine.api.oauth,com.google.appengine.api.users Google OAuth 存在(尽可能少的)bug吗?