Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Single Page Application - Fatal编程技术网

Javascript 如何处理来自单页应用程序浏览器的重定向响应

Javascript 如何处理来自单页应用程序浏览器的重定向响应,javascript,single-page-application,Javascript,Single Page Application,我有一个单页应用程序,只有浏览器的webapp(javascript,没有服务器端) 用户与应用程序交互并设置一些变量 在创建main index.html页面之后很久,当用户想要上传文件时,他需要使用oauth2(使用“令牌/隐式授权”)通过外部服务进行身份验证 一旦通过身份验证,身份验证服务将以重定向进行响应,可能会重定向到另一个页面(第2页) 页面2应该做什么来继续程序的流程 它是否应该重定向回原始主页(这次使用访问令牌) 如果是这样的话,这会不会重新加载主页并重置应用程序和设置的变量

我有一个单页应用程序,只有浏览器的webapp(javascript,没有服务器端)

用户与应用程序交互并设置一些变量

在创建main index.html页面之后很久,当用户想要上传文件时,他需要使用oauth2(使用“令牌/隐式授权”)通过外部服务进行身份验证

一旦通过身份验证,身份验证服务将以重定向进行响应,可能会重定向到另一个页面(第2页)

页面2应该做什么来继续程序的流程

  • 它是否应该重定向回原始主页(这次使用访问令牌)

  • 如果是这样的话,这会不会重新加载主页并重置应用程序和设置的变量

谢谢

阿夫纳


编辑

,, 我不使用特定的web平台,只使用普通的javascript

我发现了一个在两个单独的窗口之间进行postMessage的通用示例,它可以正常工作

我正努力根据里卡多的评论对其进行定制,即

  • 使第二个窗口弹出

  • 在SPA上设置一个单独的HTML文件或“noop”路由作为重定向URL(什么是noop路由?)

  • 在弹出窗口中轮询该URL

我找到了在主页(index.html)中创建弹出窗口、设置重定向和轮询以关闭弹出窗口的示例

在我的例子中,我将重定向URL设置为一个新页面(auth.html),该页面使用访问令牌将postMessage返回主页(index.html)

如果auth.html页面未在浏览器中打开,我是否仍希望在主页index.html中收到消息


从我为postMessage阅读的内容来看,这两个页面的index.html和auth.html应该在浏览器中的两个单独选项卡中打开。

您可以使用一个小弹出窗口,它将加载必要的oauth2端点,在SPA上设置一个单独的html文件或“noop”路由作为重定向URL。然后,您可以在弹出窗口中轮询该URL,以便知道何时关闭它(用户使用oauth2流完成)

这种策略被像、和这样的库使用

此外,根据您试图进行身份验证的特定服务,您可以找到将自动处理oauth2流的官方库和SDK


最后但并非最不重要的一点是,您还可以在中保存应用程序的当前状态,重定向到oauth2端点,并将其作为重定向URL指向应用程序。返回应用程序时,特定路径应能够恢复保存的数据并恢复用户体验,同时添加oauth2令牌。

一种方法是使用postMessage API让第2页使用令牌向主页发送消息。我的帖子并不是要告诉您使用其中一个库;我简要地解释了一种处理这个问题的方法,并以现有代码为例。“noop”路线只是来自SPA的一条路线,它什么也不做,只是显示一个占位符,因为路线的作用并不重要。它只是想让你检测弹出窗口是否完成了它的工作。如果我的答案对你有帮助,你应该将它标记为正确答案,并在其中提到其他步骤作为注释。我将它标记为正确答案。Thanks@AvnerMoshkovitz在删除的答案中提到,他用来实现他的解决方案,这在很大程度上是基于我在回答中提到的概念。