处理异步调用中的重定向

时间:2017-04-14 06:51:11

标签: ember.js ember-data

我有一个应用程序,在初始加载时,用户被重定向到登录页面。一旦用户通过身份验证,他就会被带到主页。在验证用户时,还会为浏览器设置HttpOnly cookie。所以现在要删除用户每次刷新应用程序或在另一个选项卡中打开它时的登录麻烦。我正在向我的应用程序路由的beforeModel挂钩内的服务器发送一个身份验证请求。这将按预期验证用户和页面加载。但是,如果服务器响应有401(因为用户已注销或cookie过期),应用程序将重定向到登录页面。一切正常,并且符合预期。

但是很难解决这个问题。

  1. 如果用户提供路径为/ login,我需要等待身份验证请求完成后再决定呈现登录模板,或者如果他已经登录则重定向到主屏幕。

    < / LI>
  2. 在执行目标网址中的model挂钩之前,还要等待验证调用完成。我看到模态请求进入服务器,即使响应是401进行身份验证调用。

  3. 一个很好的例子是 github 页面,一旦你登录并进入/登录页面,它们就会带你到你的主页。

1 个答案:

答案 0 :(得分:0)

经过一些路线实验。 我提出了这个解决方案。

  1. 在每个网址请求(通过刷新或输入的路径)上,存储网址,除非是/login。这将在应用程序路径的最可能的beforeModel钩子中完成。
  2. 然后,在经过身份验证的用户可以浏览的路由层次结构的每个最顶层路由上,将其重定向到登录路由。
  3. 在登录路线上进行适当的API调用以进行身份​​验证。如果用户登录过渡到存储的URL或主页,如果没有存储任何内容。但是,如果401返回加载模板相同。 确保您使用beforeModelmodelafterModel挂钩之一对API进行异步调用,并在返回语句中调用API,否则模板将加载无论如何。
  4. 注意: 1.您可以将该网址存储在可在整个应用中访问的某些service中。您还可以将服务存储其他登录信息以供将来使用。 2.在第(2)点中,确保在重定向到/login之前进行一些检查,以防不必要的重定向。假设路由是在内部转换而不是通过页面加载。 3.不要忘记在您的身份验证请求中处理401个案例,或者它可能只在页面上显示任何内容,并且在控制台中出现错误。

    希望这有帮助