UserService.getCurrentUser () возвращает ноль - PullRequest
3 голосов
/ 07 февраля 2011

Я реализовал 3-х сторонний протокол OAuth, используя Google OAuth API в Java.

Моя заявка зарегистрирована на GAE. И я также успешно получаю токен доступа. Но теперь, когда я создаю объект UserService, даже если я вошел в Gmail, а также в свой личный почтовый домен, он возвращает null при вызове getCurrentUser ()!

Мой код:

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 при использовании User Service. Тогда в чем здесь проблема?

Также, когда я пытаюсь это сделать:

out.println(userService.isUserLoggedIn() ? "User is Logged In" : "User is Log Off");

Выводит:

Пользователь отключен

пока я вхожу в свой личный домен и в Gmail оба! Я думаю, это должно перенаправить меня на страницу входа в случае, если я выйду из системы. Но это не так!

Кроме того, согласно здесь & 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)

Для справки: Использование службы пользователей Для API: com.google.appengine.api.oauth , com.google.appengine.api.users

Это (наименьшая возможная) ошибка с Google OAuth?

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Необходимо создать URL переадресации отправки:

response.sendRedirect(userService.createLoginURL(request.getRequestURI()));

, это перенаправит на страницу входа в Google, после чего вы сможете получить имя пользователя!

0 голосов
/ 01 апреля 2014

У меня была похожая проблема, и это произошло из-за проблемы с сигнатурой.

Мое приложение отправляло параметры в теле запроса, выполняя POST с mime "application / x-www-form-urlencoded"type.

Когда OAuthParameters подписывает запрос, он включает в себя все параметры запроса в данных для подписи.В этом случае параметры были пустыми.

Перемещение параметров запроса из тела HTTP-запроса в строку запроса URL решило проблему.

Отредактировано:

Кажется, что происходит сбой, когда существует более одного параметра с одним и тем же именем.

Оба параметра в теле HTTP (использующие "application / x-www-form-urlencoded") и дублированные имена параметров должны бытьучитывается при построении подписи согласно 9.1.1.Параметры запроса нормализации .

Но похоже, что OAuthParameters не учитывает эти две возможности для метода "computeSignature ()" (строка 137).Фактически, в строке 157 у нас есть следующий код:

for (Object repeatedValue : (Collection<?>) value) {
    putParameter(parameters, name, repeatedValue);
}

, который сохраняет только последнее значение для повторяемого параметра?

Отредактировано 2:

Проблема с закодированным параметром описана в проблеме № 1: https: // code.google.com/p/google-oauth-java-client/issues/detail?id=1.Это известная проблема.На странице javadocs: http: // javadoc.google-api-java-client.googlecode.com/hg/1.2.2-alpha/com/google/api/client/auth/oauth/package-summary.html он включен внеподдерживаемые функции.

Связанный пост: При использовании Google API Java Client на Android POST-запрос не проходит проверку подлинности в приложении Google App Engine с использованием OAuth

...