Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用弹出窗口验证第三方服务?_Javascript_Authentication_Oauth_Popup - Fatal编程技术网

Javascript 如何使用弹出窗口验证第三方服务?

Javascript 如何使用弹出窗口验证第三方服务?,javascript,authentication,oauth,popup,Javascript,Authentication,Oauth,Popup,在尝试通过Google、LinkedIn、Facebook等进行身份验证时,我遇到了一个问题。身份验证需要在弹出窗口中完成(客户端请求它),但在我打开弹出窗口后,我失去了对它的控制,无法与主窗口通信授权已完成 下面是发生的详细情况: 用户单击主窗口中的“使用谷歌登录”按钮 主窗口使用var popup=window.open('http://example.com/login/google) 如果用户未批准我的网站访问其帐户,弹出窗口的URL将自动更改为类似http://google.com/O

在尝试通过Google、LinkedIn、Facebook等进行身份验证时,我遇到了一个问题。身份验证需要在弹出窗口中完成(客户端请求它),但在我打开弹出窗口后,我失去了对它的控制,无法与主窗口通信授权已完成

下面是发生的详细情况:

  • 用户单击主窗口中的“使用谷歌登录”按钮

  • 主窗口使用
    var popup=window.open('http://example.com/login/google)

  • 如果用户未批准我的网站访问其帐户,弹出窗口的URL将自动更改为类似
    http://google.com/OAuth2/
    。此重定向由我正在使用的passport组件(
    koa passport
    )完成

  • 用户批准登录,弹出窗口的URL重定向到
    http://example.com/login/google/callback
    带有授权令牌。这是我的passport回调路由在我的数据库中注册用户并创建授权令牌的地方

  • 问题是,此时用户同时打开了主窗口和弹出窗口,我无法通知主窗口弹出窗口已完成身份验证。弹出窗口需要自动关闭,主窗口需要将用户带到其私人主页

    我尝试在主窗口中创建一个全局函数,但在最终重定向后,弹出窗口无法访问其父窗口的全局窗口对象。我想从主窗口向弹出窗口发送一条消息,以便在它们之间共享全局上下文,但问题是弹出窗口重定向到Google(或其他身份验证提供商),当它重定向回我的回调URL时,它忘记了这个上下文

    我找到的唯一方法是在主窗口中设置计时器并监视弹出窗口的URL,但这看起来像是一个可怕的黑客行为。弹出窗口是否有其他方式通知主窗口用户已登录