理解canactivate和路由角度2

时间:2017-11-07 07:12:07

标签: angular angular-ui-router canactivate

我正在尝试检查用户是否已获得授权,如果没有将他/她指向登录页面。我实际上设法做到了,但我很难理解机制的运作方式。请看下面的代码。

  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在这种情况下的工作原理。当我注释掉#34;返回false"?时,用户是否会转到目标页面并导航回登录状态。或者" router.navigate"函数会覆盖所有路由命令吗?我有点困惑..

1 个答案:

答案 0 :(得分: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。

这个错误返回是让警卫知道条件失败。

A working example