【问题标题】:Handle redirection in async calls处理异步调用中的重定向
【发布时间】:2017-04-14 06:51:10
【问题描述】:

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

但是有一些事情需要解决。

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

  2. 在目标 URL 中执行 model 钩子之前,还要等待验证调用完成。即使响应是 401 进行身份验证调用,我也看到模态请求会发送到服务器。

一个很好的例子是在 github 页面中,一旦您登录并转到 /login 页面,它们就会将您带到您的主页。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

    1. 在每个 url 请求(通过刷新或输入路径)上,存储 url,除非它是用于 /login。这很可能在应用程序路由的beforeModel 挂钩中完成。
    2. 然后在经过身份验证的用户可以浏览的路由层次结构的每个最顶层路由上,将其重定向到登录路由。
    3. 在登录路由上对 API 进行适当的调用以进行身份​​验证。如果用户登录到存储的 url 或主页,如果没有存储任何内容。但是,如果 401 回来加载相同的模板。 确保您对 API 的异步调用是在 beforeModelmodelafterModel 钩子之一中进行的,并且您在返回语句中调用了 API,否则无论如何都会加载模板。

    注意: 1.您可以将url存储在一些service中,可以在整个应用程序中访问。您还可以让服务存储其他登录信息以供将来使用。 2. 在第 (2) 点中,请务必在重定向到/login 之前进行一些检查,以防出现不必要的重定向。假设路由是否在内部而不是通过页面加载进行转换。 3. 不要忘记在您的身份验证请求中处理 401 情况,否则它可能只是在页面上不显示任何内容并在控制台中出现错误。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多