【问题标题】:How to handle redirect response from a Single Page Application browser only webapp如何处理来自单页应用程序浏览器仅 webapp 的重定向响应
【发布时间】: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


【解决方案1】:

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

vue-authenticatereact-oauthsatellizer 等库使用此策略。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2018-07-25
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多