如何获得当前的路线守卫

avv*_*sis 5 router guard angular

我正在制作一个其中包含一些受保护页面的应用程序。只有注册用户才能访问此页面。有时我应该检查会话是否超时或更改浏览器选项卡之后。如果用户已经在其他选项卡或会话中退出,则该应用程序应将用户重定向到登录页面。

我正在使用警卫来保护网页,因此我认为这是由他的警卫检查当前路线的正确方法。如果用户会话过期/关闭并且当前路由使用某些防护措施,则应该通过重定向页面。

有人可以帮助守卫当前路线吗?

我检查了Router和ActivatedRoute的文档,但没有找到任何有关此的信息。

小智 5

我也面临这个问题。因此,我做了一些研究和摆弄,并开发了此解决方案:

假设AuthService是像https://angular.io/guide/router#canactivate-requiring-authentication中那样实现的。

在AuthService中添加以下内容:

Logout() {
// (logout logic here)
  var currentRouteConfig = this.router.config.find(f=>f.path == this.router.url.substr(1));
  if(currentRouteConfig != null && currentRouteConfig.CanActivate != null)  {
    this.redirectUrl = this.router.url;
    this.router.navigate(['/login'])
}
Run Code Online (Sandbox Code Playgroud)

substr(1)仅删除开头的“ /”,因为路由器配置中的路径没有它。

请记住,这是一个幼稚的实现,假设canActivate始终在执行身份验证保护。其他逻辑可能需要更深入地检查身份验证保护措施。

  • 请注意:如果您有延迟加载的模块(即使用“loadChildren”),则路由前缀将不会包含在“path”属性中。您最终可能会遇到重复的路径...因此检查路由器 URL 并不可靠。 (3认同)

eug*_*005 4

我面临着完全相同的问题。这是一个场景,可以更好地理解需求。想象一下您有一个网站,其中一些页面受到保护,而另一些则不受保护。防护用于保护适当的页面。现在假设用户位于受保护的页面上(假设正在查看个人资料)并单击“注销”按钮。应该发生什么?用户应该被重定向到主页。但是,如果用户位于不受防护保护的页面上,则不会真正发生任何事情。当然,如果应该发生重定向,可以在每个单页上检查它,但这不是最好的解决方案。更好的解决方案是在 AuthService 中处理这种情况,注销实际上是发生的,但为此有人需要知道当前活动的路由是否受到保护。

  • 尽管您对问题的贡献是有效的,因为它提供了此类功能的基本原理,但答案并不是这样的地方。请将来使用评论部分(我知道这对您来说仍然不可能,但请记住这一点)。 (3认同)