如果用户登录,它将自动重定向到route: ''
,并且我将令牌存储在localStorage中。
但是,如果登录的用户手动键入URL route: /login
,则应该将其路由到route: ''
中,这就是我要实现的目标。
我所做的是在OnInit()
内的LoginComponent
中添加一个验证,它可以正常工作。但是如何在AuthGuard中实现呢?我正在考虑如果route: /login
获取请求的路由,并在已经登录的情况下导航至route: ''
。
路线:
{ path: '', component: PostListComponent },
{ path: 'create', component: PostCreateComponent, canActivate: [AuthGuard] },
{ path: 'edit/:postId', component: PostCreateComponent, canActivate: [AuthGuard] },
{ path: 'login', component: LoginComponent }
AuthGuard:
const currentRoute = route.url[0].path;
const isAuth = this.authService.getIsAuth();
if (!isAuth) {
this.router.navigate(['/login']);
}
if (currentRoute === '/login') {
this.router.navigate(['/']);
}
console.log(currentRoute);
return isAuth;
LoginComponent:
ngOnInit() {
const isAuth = this.authService.getIsAuth();
if (isAuth) {
this.router.navigate(['/']);
}
}
更新:我更新了AuthGuard来检查当前路由,但是如果在地址栏中手动键入该路由,它将无法获取该路由。
答案 0 :(得分:0)
在进一步检查我的代码和stackoverflow浏览之后,我提供了一个解决方案,但不确定其安全性。如果您有更好的方法,请分享。
路线:
{ path: 'login', component: LoginComponent, canActivate: [AuthGuard] }
AuthGuard:
const currentRoute = route.url[0].path;
let isAuth = this.authService.getIsAuth();
if (isAuth) {
if (currentRoute === 'login') {
this.router.navigate(['/']);
}
} else {
if (currentRoute === 'login') {
isAuth = true;
} else {
this.router.navigate(['/login']);
}
}
return isAuth;
isAuth
返回布尔值(如果已通过身份验证),在这里我在AuthGuard中使用了let
,并将值更改为true
。