【发布时间】:2011-06-22 17:36:15
【问题描述】:
我已经使用 Java 中的 Google OAuth API 实现了 3-legged 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 时!我认为,如果我退出,这可能会将我重定向到登录页面。但是,它没有!
另外,根据here & in 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)
供参考:Using the Users Service 对于 API:com.google.appengine.api.oauth、com.google.appengine.api.users
Google OAuth 是否存在(最不可能的)错误?
【问题讨论】:
标签: java google-app-engine oauth google-api