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始终在执行身份验证保护。其他逻辑可能需要更深入地检查身份验证保护措施。
我面临着完全相同的问题。这是一个场景,可以更好地理解需求。想象一下您有一个网站,其中一些页面受到保护,而另一些则不受保护。防护用于保护适当的页面。现在假设用户位于受保护的页面上(假设正在查看个人资料)并单击“注销”按钮。应该发生什么?用户应该被重定向到主页。但是,如果用户位于不受防护保护的页面上,则不会真正发生任何事情。当然,如果应该发生重定向,可以在每个单页上检查它,但这不是最好的解决方案。更好的解决方案是在 AuthService 中处理这种情况,注销实际上是发生的,但为此有人需要知道当前活动的路由是否受到保护。
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |