Как обрабатывать обратный вызов аутентификации? - PullRequest
1 голос
/ 25 февраля 2011

Я занимаюсь разработкой веб-приложения на Java. Я использую личный домен appspot (googleappengine). Я реализовал 3-х сторонний OAuth. И аутентификация работает нормально.

Проблема здесь при первом запуске приложения. Тем не менее, я вошел в мой Gmail, он не определяет имя пользователя. И он перенаправляет на страницу входа. После входа в систему я получаю данные, доступные в хранилище данных appspot. Но я не могу добавить эти данные на мою домашнюю страницу: (

Мой код похож на:

  • Сервлет Ajax Call of First Request (home.html):

        $(document).ready(function(){
            jQuery.ajax({
                type: "get",
                url: "http://searcegadget2.appspot.com/RequestTokenServlet",
                success: function(msg){
                    if(msg.search('tr') != -1){
                        id = msg.split('</tr>').length - 1;
                        $('#gadget').css('display', 'block');
                        $("tbody").append(msg);
                        difference();
                    }else if(msg.search('form') != -1){
                        $('#gadget').css('display', 'none');
                        document.write(msg);
                    }else if(msg.search('http') != -1){
                        $('#gadget').css('display', 'none');
                        document.location = msg;
                    }
                },error: function(XMLHttpRequest, textStatus, errorThrown){
                    //alert(XMLHttpRequest.responseText);
                }
            });
        });
    

Идентификатор моей таблицы: # гаджет и он имеет отображение блока блока. И, как вы можете видеть, я также установил параметр обратного вызова OAuth в home.html

  • RequestTokenServlet.java Код:

    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
    oauthParameters.setScope("https://spreadsheets.google.com/feeds/");
    oauthParameters.setOAuthCallback("http://searcegadget2.appspot.com/home.html");
    oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);
    
    UserService userService = UserServiceFactory.getUserService();
    if (userService.isUserLoggedIn()) {
        //fetch row
    } else {
        out.print(userService.createLoginURL(request.getRequestURI()));
    }
    

Я имею в виду, appspot возвращает строку таблицы html и отображает только строку в любом браузере . Хотя я хочу, чтобы этот ряд был добавлен в таблицу домашней страницы, но я не могу.

1

Кроме того, это происходит только при первом входе в систему. Позже, когда я снова через URL своего приложения, он возвращает домашнюю страницу со строкой, добавленной в таблицу! Но проблема повторяется, когда я перезагружаю браузер!

2

Я хочу, чтобы при первом вызове отображался второй экран.

Как мне решить эту проблему? Есть ли другой способ проверить, входит ли пользователь в Java или нет?

1 Ответ

0 голосов
/ 25 февраля 2011

Это нормально, что ваше приложение GAE не обнаруживает, что вы не вошли в Google.

Если это возможно, то любой сайт GAE может войти в систему всех пользователей gmail автоматически без их согласия.OpenID / OAuth работает не так - для обеспечения безопасности требуется взаимодействие с пользователем.

Обновление:

Если пользователь не вошел в систему, тогда userService.isUserLoggedIn() возвращает false, поэтому я полагаю, что HTML-таблица не возвращается.

Кстати, если пользователь не вошел в систему, вы должны перенаправить его на страницу входа в Google:

response.sendRedirect(userService.createLoginURL(req.getRequestURI()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...