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();')

它不是我应该编写的完整代码,但即使这样也行不通。如果在中间身份验证窗口(通过谷歌,用于输入密码)之后调用主页,则上述代码不起作用,并且窗口不会关闭。

// 只是作为一些更多信息,如果不需要,请忽略另外请注意,

    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 回答
2

以下是我看到的代码可以更改为:这只会创建一个弹出窗口,并且在身份验证后将关闭。

您的登录页面代码为:

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


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

newWindow('auth/google') 应该有以下代码。

!!!
html
head
    script(type='text/javascript').
        function onAuthSuccess(authSuccessUrl) {    
            window.onClose(authSuccessUrl);
        }
        function ajaxPost() {            
        var uname = $("#name");
        var pass = $("#password");
             $.ajax({
                  url: "/auth/google/",
                  type: "POST",
                  data: {username : uname, password: pass}                      
                }).success(function(data){
                    var redirectUrl = data.url; // or "/home" as you had mentioned
                    onAuthSuccess(redirectUrl);
                });
        }

body
   p UserName:
    input#name(type="text", name="username")
p Password:
    input#password(type="text", name="password")
p: button(type="submit", onclick="ajaxPost()").btnLogin

如果您可以通过 ajax 发布到 google 身份验证服务并获得成功响应,则可以使用此方法。

希望这对你很有效。

于 2013-07-31T09:33:28.223 回答