Javascript 如何在Aurelia中的请求URL处显示未经授权的视图

Javascript 如何在Aurelia中的请求URL处显示未经授权的视图,javascript,routing,aurelia,Javascript,Routing,Aurelia,如果在AureliacanActivate方法中,则确定用户不能查看请求的页面。如何在不允许用户访问的URL处向该用户显示“未经授权”的页面 我不想返回新重定向(“#/unauthorized”),因为这样用户就看不到他们不允许访问的URL,并且我在URL中有一些导航栏状态将丢失 注意:一个可能的答案可能是,“你做的都是错的”。) 您希望在不更改URL的情况下显示未经授权的页面。因此,如果用户访问“/受限页面”,并且不允许他们查看,则显示未经授权的模板,而不是实际页面 为此,如果用户未通过相应的

如果在Aurelia
canActivate
方法中,则确定用户不能查看请求的页面。如何在不允许用户访问的URL处向该用户显示“未经授权”的页面

我不想返回
新重定向(“#/unauthorized”)
,因为这样用户就看不到他们不允许访问的URL,并且我在URL中有一些导航栏状态将丢失


注意:一个可能的答案可能是,“你做的都是错的”。)

您希望在不更改URL的情况下显示未经授权的页面。因此,如果用户访问“/受限页面”,并且不允许他们查看,则显示未经授权的模板,而不是实际页面

为此,如果用户未通过相应的检查,可以从
canActivate
方法中设置ViewModel本身的模板值。然后在ViewModel上的
getViewStrategy
中,您将检查此值是否已设置并显示该视图,如果未设置,则显示常规视图

export class ViewModel {
  viewTemplate = "./view-model.html";

  canActivate(params, routeConfig) {
    if (!canViewPage) {
      this.viewTemplate = "./401-unauthorized.html";
    }
  }

  getViewStrategy() {
    return this.viewTemplate;
  }  
}
为了进一步简化,您只需从
canActivate
的内部设置
getViewStrategy
函数本身

export class ViewModel {
  canActivate(params, routeConfig) {
    if (!canViewPage) {
      this.getViewStrategy = function() { return "./401-unauthorized.html"; };
    }
  }
}

我了解授权管道,但我们的应用程序有非常复杂的授权需求。我们想把这些东西放在每个
canActivate
方法中,这样它就不会被扔进一个巨大的管道步骤中。正如我所说,我不想改变方向。你能详细解释一下为什么这一切都是错的吗?如果不是这个,
canActivate
的作用是什么?对不起。我把你的问题看得太快了。请查看我添加的最新编辑。我相信这可以通过ViewModel中的getViewStrategy实现。在这种特定情况下,您根本不需要canActivate,因为它总是正确的。因此,只需实现getViewStrategy钩子并执行条件检查,然后返回Unauthorith页面。有没有理由不保存URL中的数据,然后在Unauthorited页面中显示该信息?您似乎还可以保存url中的任何状态以供以后使用。我们有从url获取其状态的导航栏组件,因此我们不希望更改url并丢失导航栏状态。如果URL没有更改,导航栏将保持其状态,因此用户可以使用它从未经授权的页面快速移动。但是您不能修改它,使导航栏状态绑定到ViewModel的属性而不是URL吗?那么,URL是否被更改就无关紧要了。将导航栏直接绑定到URL似乎有点脆弱。是的,但对我来说,在两个地方保持这种状态更脆弱,因为这样它们可能会失去同步。URL上说你在“A公司”是不好的,但导航栏上说你在“B公司”是不好的。好的,只是一个建议。:)