【发布时间】:2019-03-26 01:15:26
【问题描述】:
我有单页应用程序,只有浏览器的 webapp(javascript,没有服务器端)。
用户与应用程序交互并设置一些变量。
在 index.html 主页面创建之后,当用户想要上传文件时,他需要使用 oauth2 向外部服务进行身份验证(使用“令牌/隐式授权”)。
一旦通过身份验证,身份验证服务会以重定向响应,可能会重定向到另一个页面 (page2)。
page2应该怎么做才能继续程序的流程?
是否应该重定向回原始主页(这一次,使用访问令牌)?
如果是这样,这不会重新加载主页并重置应用程序和设置的变量吗?
谢谢,
Avner
编辑
Ricardo, 我不使用特定的网络平台,只使用普通的 javascript。
@charlietfl 我找到了一个通用示例here,它在 2 个单独的窗口之间执行 postMessage,它工作正常。
我正在根据里卡多的 cmets 来定制它,即
弹出第二个窗口
在您的 SPA 上设置单独的 HTML 文件或“noop”路由作为重定向 URL(什么是 noop 路由?)
在弹出窗口中轮询该 URL
我发现this 示例在主页(index.html)中创建弹出窗口,设置重定向,并轮询以关闭弹出窗口。
在我的例子中,我将重定向 URL 设置为一个新页面 (auth.html),该页面使用访问令牌将 postMessage 发送回主页 (index.html)。
如果 auth.html 页面没有在浏览器中打开,我是否仍希望在主页 index.html 中收到一条消息?
根据我为 postMessage 阅读的内容,index.html 和 auth.html 应该在浏览器的 2 个单独选项卡中打开。
【问题讨论】:
-
一种方法是使用 postMessage API 让页面 2 使用令牌向主页发送消息
-
我的帖子并不是要告诉您使用其中一个库;我已经简要解释了一种处理问题的方法,并以现有代码为例。 “noop”路由只是来自您的 SPA 的路由,它什么都不做,只是显示一个占位符,因为路由的作用并不重要。它只是为了让您检测到弹出窗口完成了它的工作。
-
如果我的回答对您有所帮助,您应该将其标记为正确答案,并在其中提及其他步骤作为评论。
-
我将其标记为正确答案。谢谢
-
@AvnerMoshkovitz 在已删除的答案中提到,他使用this guide 来实现他的解决方案,这主要基于我在回答中提到的概念。
标签: javascript single-page-application