1

Oauth 認証用の新しい (タブ) ウィンドウを開き、認証が成功したときに前のタブ (ログイン済み) に戻るための認証戦略は何ですか?

私は、Twitter、Facebook、および Google に対して、passportjs 認証戦略を使用しています。しかし、そのすべてが同じウィンドウタブで認証を行います。上記を行うために従うことができる事前定義された戦略はありますか?

a(target="_blank") を使用して新しいアカウントで許可ウィンドウを開くことはできますが、(ユーザーによる) アカウント認証時に前のタブに戻りません。

編集(次の回答に基づく)

ログインページは次のようになります:-

!!!
html
head
    script.(type='text/javascript')
        function newWindow (auth_target) {
            authWindow = window.open(auth_target);
            var authenticationSuccessUrl = "/home"
            authWindow.onClose = function () {
                alert('onClose called.');
                authWindow.close();
                window.location = authenticationSuccessUrl;
            }
        }


    body
        button(type="button", onclick="newWindow('auth/google');").btnLogin with Gmail 

新しいウィンドウ(家)のために私は書いた: -

!!!
html
head
    script(type='text/javascript').
        function onAuthSuccess() {

            authWindow=window.location;
            window.onClose();
        }

body(onload='onAuthSuccess();')

私が書くはずだった完全なコードではありませんが、これでもうまくいきません。中間認証ウィンドウ (Google による、パスワード入力用) の後にホームページが呼び出された場合、上記のコードは機能せず、ウィンドウは閉じません。

// 追加情報として、必要がなければ無視します。

    window.close()

開くきっかけとなった親ウィンドウが開いている場合にのみ機能します。現在のウィンドウがスタンドアロンの場合、上記の window.close() はウィンドウを閉じません。同様に、上記のホームページ コードは現在のウィンドウを閉じることができません。

4

2 に答える 2

3

認証用の新しいウィンドウを作成するときに、ウィンドウ オブジェクトへの参照を取得できます。

var authWindow = window.open("location","");

認証タブでは、認証成功時に、ウィンドウを閉じてプロパティを設定するメソッドを呼び出すか、認証が完了したことを示すソース ウィンドウでメソッドを呼び出すことができます。

var authenticationSuccessUrl = "http://auth-sucess.url"
authWindow.onClose = function () {
    authWindow.close();
    window.location = authenticationSuccessUrl;
}

認証ウィンドウの JavaScript で:

var onAuthSuccess = function (){
    window.onClose();
}

処理の最後に、authWindow への参照を必ず削除してください。ウィンドウ オブジェクトを参照として使用すると、アプリケーションでメモリ リークが発生する可能性があります。

于 2013-07-28T09:50:46.393 に答える