【问题标题】:How to integrate Google Identity Toolkit with a single webpage app (e.g. GWT)如何将 Google Identity Toolkit 与单个网页应用程序(例如 GWT)集成
【发布时间】:2015-10-08 01:37:33
【问题描述】:

我需要将 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()”方法。这可以在任何时候第一次调用,并且应该能够处理登录状态更改!

最后,我已经回答了我自己的问题,这可能对其他人有帮助,但我仍然想问是否有更好的方法,我错过了。

【问题讨论】:

  • 注意一下,signOutUrl的值是相对路径,所以应该是/gitkit/signout。
  • @dsalama 谢谢。我已经清理了网址并添加了更多信息。

标签: gwt google-identity-toolkit


【解决方案1】:

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

如果渲染登录按钮有问题,有documentation关于如何直接加载小部件。

【讨论】:

  • 如果我将小部件放在单独的页面上(使用 mode=select 参数),它最终与弹出场景(我在更新的问题中描述)没有太大区别。 Derek,如果您可以查看我的解决方案并确认目前没有更好的解决方案,我很乐意接受您的回答。还请考虑按照问题中描述的“$wnd.google.identitytoolkit.update()”的方式实现一些东西。
  • 是的,考虑到限制,您的方式看起来是最好的方法。您的建议已得到适当注意 - 我们绝对有兴趣改进 SPA 的集成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2023-01-31
  • 2011-12-26
相关资源
最近更新 更多