如何处理身份验证回调?

时间:2011-02-25 06:09:38

标签: java jquery google-app-engine web-applications authentication

我正在用java开发一个Web应用程序。我正在使用个人域名appspot(googleappengine)。我实施了三脚OAuth。身份验证工作正常。

这里的问题是第一次运行。虽然,我登录了我的Gmail,但它没有检测到用户名。它会重定向到登录页面。登录后,我在appspot数据存储区中获取数据。但是,我无法将该数据附加到我的主页:(

我的代码就像:

  • Ajax调用First Request Servlet (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);
                }
            });
        });
    

我的表格div是 #gadget &amp;它有块块显示。正如您所看到的,我还将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表格行,&amp;它在任何浏览器中仅显示。虽然我希望该行被附加到我的主页表,但我不能。

1

此外,只有在我第一次登录时才会发生这种情况。稍后,当我再次通过我的应用程序URL时,它会返回主页,并将该行附加到表中!但是,当我重新启动浏览器时,问题会重复出现!

2

我想在第一次通话时显示第二个屏幕。

如何解决此问题?有没有其他方法可以检查用户是否在Java中登录?

1 个答案:

答案 0 :(得分:0)

您的GAE应用程序检测到您未登录谷歌是正常现象。

如果可以,那么任何GAE站点都可以在未经他们同意的情况下自动登录所有gmail用户。 OpenID / OAuth不能像这样工作 - 出于安全原因,它需要按设计进行用户交互。

<强>更新

如果用户未登录,则userService.isUserLoggedIn()返回false,因此我认为没有返回HTML表。

顺便说一下,如果用户未登录,则应将其重定向到Google登录页面:

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