0

我正在尝试检查用户是否被授权,如果没有将他/她引导到登录页面。我实际上设法做到了,但我很难理解该机制是如何工作的。请看下面的代码。

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    let fus: FakeUserService  = new FakeUserService();
    if(!fus.authorization()){
      this.router.navigate(['login']);
      return false; // Code works even this line is commented out. The user is redirected to the login page.
    }
    return true;
  }

我不明白的一点是 router.navigate 在这种情况下是如何工作的。当我注释掉“return false”时,用户是否会转到预期页面并导航回登录?还是“router.navigate”功能覆盖所有路由命令?我有点困惑。。

4

1 回答 1

0
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from "@angular/router";
import {Injectable} from "@angular/core";
import {Observable} from "rxjs";

@Injectable()
export class AuthGuard implements CanActivate{


  constructor(protected router: Router)
  {

  }

    canActivate(route: ActivatedRouteSnapshot,
                state: RouterStateSnapshot):Observable<boolean> | boolean{
      console.log("In Can Activate AuthGuard");
      if(route.params['key'] == "X"){
        return true;
      }
      this.router.navigate(['/home',{message:"Not Authorised"}]);
      return false;
    }
}

路线

  { path: 'guardcheck', component:  CheckComponent , canActivate: [AuthGuard]},

在上面的示例中,当我们希望用户继续使用放置防护的路由时,我们返回 true,如果不是,我们使用路由器导航导航到错误页面并返回 false。

这个 false 返回是为了让守卫知道条件失败。

一个工作示例

于 2017-11-07T07:17:16.170 回答