来自其他应用根的路由器authorizeStep会一直触发

时间:2017-01-31 11:53:29

标签: aurelia aurelia-router

我的Aurelia项目分为两个应用程序根,两者都有自己的路由结构。 应用程序根1包含所有不需要进行身份验证的屏幕(登录,重置密码,...)应用程序根2所有其他屏幕。

当您未使用authorizeStep进行身份验证时,我阻止访问应用根2上的路由。在此步骤中,我在未经过身份验证时将根目录设置为app root 1。应用程序根1具有登录视图作为默认路由,因此这非常有效。因此,当您未经过身份验证并尝试导航到应用根2中的深层网址时,会发生这种情况:

  1. App Root 2配置它的路由并尝试导航到深层网址
  2. authorizeStep触发器,您未经过身份验证,路由被取消,aurelia.setRoot()发生在app root 1
  3. App root 1配置它的路由器并导航到默认路由,即登录页面
  4. 问题是手动注销。当单击位于应用程序根目录2中的此按钮时。我清除用户数据,因此您不再进行身份验证。在该步骤之后,我手动将根设置为app root 1,然后我得到一个无限循环:

    1. App root 1配置它的路由器并导航到默认路由,即登录页面
    2. authorizeStep从app root 2!触发,你没有经过身份验证,路由被取消,aurelia.setRoot()发生在app root 1
    3. App root 1配置它的路由器并导航到默认路由,即登录页面
    4. ...
    5. 问题是在root 1中导航时,来自root 2的authorizeStep会触发。我找了一种删除authorizestep的方法,但我不认为框架当前暴露了这个。我发现很奇怪这个问题只发生在点击注销,深层链接和重定向到登录按预期工作时。

      为了清晰起见,我创建了一个可重现的要点,单击注销按钮,您将看到控制台无限重复授权步骤。

      https://gist.run/?id=1a551dcc4bec7d191ab680a937b19cfc

1 个答案:

答案 0 :(得分:0)

事实证明你需要自己清除这些步骤,这不是在aurelia.setRoot()内部调用的router.clear()中完成的。

幸运的是,您实际上可以自己做到这一点: this.pipelineProvider.reset();

我发现这种行为不合乎逻辑,所以我为它创建了一个问题:https://github.com/aurelia/router/issues/465