如何将Google Identity Toolkit与单个网页应用集成(例如GWT)

时间:2015-07-18 12:01:30

标签: gwt google-identity-toolkit

我需要将Google的identitytoolkit(Google's identitytoolkit)与我的Google webtoolkit(GWT)应用程序集成。

然而,渲染gitkit signInButton或小部件已经不是直截了当的,因为这样做的方式是链接到" window.onload"。我需要稍后渲染小部件。

我设法做到了(见下文),但我对此并不满意,我想知道是否有其他人找到了更好的整合方式。

 private native void showGitKitWidget() /*-{
        $wnd.google.identitytoolkit.signInButton(
            '#gitkitDivId', // accepts any CSS selector
            {
             widgetUrl: "//127.0.0.1:8888/gitkit/signin.html",
             signOutUrl: "/gitkit/signout",
             popupMode: true                    
            }
        );

        var evt = $doc.createEvent('Event');
        evt.initEvent('load', false, false);
        $wnd.dispatchEvent(evt);
    }-*/;

更新 实际上,使用signInButton的popupMode参数可以实现更紧密的无缝集成。这样可以在浏览器窗口中弹出窗口小部件,并保持GWT窗口不变。然后在小部件中而不是重定向到successUrl,我使用JS回调来触发AJAX调用。

var config = {
            idps: ["googleplus"],
            signInSuccessUrl: '//127.0.0.1:8888/gwt/servlet/gitkit/signedin',          
            callbacks: {
            signInSuccess: function(tokenString, accountInfo,
              opt_signInSuccessUrl) {
                /* !!! Tell GWT parent window that we are ready...
                 I believe using a cookie for which the parent is
                 regularly looking is the way to go, because it
                 will work in mobile browsers too.
                */ 

                return false; // prevents redirect to signInSuccessUrl
              }
           }

更新最后,GWT父窗口将等待结果cookie,如果找到,则对signInSuccessUrl进行AJAX调用。它还必须再次渲染signInButton,然后将显示已登录的用户。

所以唯一丑陋的解决方法是使用onload方法调用如何呈现signInButton。

如果有一种方法可以在需要时动态渲染signInButton,这将非常有用,例如,如果有一个" $ wnd.google.identitytoolkit.update()"方法。这可以在任何时候第一次调用,也应该能够处理登录状态的变化!

总之,我已经回答了我自己的问题,这可能对其他人有所帮助,但我还是想问一下是否会有更好的方式,我错过了。

1 个答案:

答案 0 :(得分:2)

正如您所指出的,Identity Toolkit小部件当前需要由页面加载触发。单页应用程序(如使用GWT构建的应用程序)应将小部件放在单独的页面上。然后,您可以将用户重定向到那里 - 或者通过弹出窗口进行渲染,如您所知 - 来登录用户。

如果渲染登录按钮是个问题,那么如何直接加载小部件就有documentation