Angular7路由重定向用户

时间:2019-03-06 01:08:42

标签: angular angular-router

如果用户登录,它将自动重定向到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来检查当前路由,但是如果在地址栏中手动键入该路由,它将无法获取该路由。

1 个答案:

答案 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