2

Google の identitytoolkit ( Google の 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 をレンダリングする方法です。

たとえば、「$wnd.google.identitytoolkit.update()」メソッドがある場合など、必要に応じて動的に signInButton をレンダリングする方法があれば非常に役立ちます。これは初めていつでも呼び出すことができ、サインイン ステータスの変更も処理できるはずです。

結論として、私は自分の質問に答えました。これは他の人に役立つかもしれませんが、見逃したより良い方法があるかどうかも尋ねたいです。

4

1 に答える 1