首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角钢护卫安全路线

角钢护卫安全路线
EN

Stack Overflow用户
提问于 2019-07-19 04:00:28
回答 2查看 590关注 0票数 0

我正试图通过使用auth-guard来保护我的路线。

我的问题是用户是否登录。用户不能登录/注册页面,必须将用户重定向到默认页面。

routing.module.ts

代码语言:javascript
复制
const routes: Routes = [
 { path: '', component: LoginComponent },
 { path: 'signup', component: SignupComponent },
 { path: 'list-users', component: ListUsersComponent, canActivate: 
 [AuthGuardService] }
];

auth.guard.ts

代码语言:javascript
复制
if (!this.authService.isLoggedIn()) {
  this.router.navigate(['/']);
  console.log('go to login');
  return false;
}
console.log('has access');
return true;

我试着让代码看起来像这样,但是我得到了一个无限循环。

代码语言:javascript
复制
if (!this.authService.isLoggedIn()) {
  this.router.navigate(['/']);
  console.log('go to login');
  return false;
} else {
  console.log('redirect when loggedin to list-users');
  this.router.navigate(['list-users']); // infinite loop
  return true;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-19 05:24:57

创建两个服务

anonymous-guard.ts

代码语言:javascript
复制
if (!this.authService.isLoggedIn()) {
 this.router.navigate(['/']);
 return false;
} else {
 return true;
}

认证-警卫-ts

代码语言:javascript
复制
if (this.authService.isLoggedIn()) {
   this.router.navigate(['list-users']);
   return false;
} else {
   retrun true;
}

然后把它应用到路线上

代码语言:javascript
复制
const routes: Routes = [
 { path: '', component: LoginComponent,canActivate: 
 [AuthenticatedGuardService] },
 { path: 'signup', component: SignupComponent,canActivate: 
 [AuthenticatedGuardService] },
 { path: 'list-users', component: ListUsersComponent, canActivate: 
 [AnonymousGuardService] }
];
票数 1
EN

Stack Overflow用户

发布于 2019-07-19 05:15:21

我的问题是用户是否登录。用户不能登录/注册页面,必须将用户重定向到默认页面。

您只需检查用户是否正在访问/login或/signup路由(无论您如何命名它)。

您已经创建了一个无限循环,因为this.router.navigate(['list-users']);递归地调用auth保护,它依次执行“users”块,并将用户导航回列表用户,该列表用户再次调用auth保护等等。

AuthGuard.ts

代码语言:javascript
复制
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
  if (!this.authService.isLoggedIn()) { //user is not logged in
    this.router.navigate(['/']); //go to login
    return false;
  } else { //user is logged in

    if(state.url.indexOf("/login") > 0 || state.url.indexOf("/signup") > 0 ){ //check if logged in user is accessing /login or /signup path
      this.router.navigate('['list-users']');
      return false;
    }else{
      return true;
    }

  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57105349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档