我正在尝试检查用户是否已获得授权,如果没有将他/她指向登录页面。我实际上设法做到了,但我很难理解机制的运作方式。请看下面的代码。
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"函数会覆盖所有路由命令吗?我有点困惑..
答案 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。
这个错误返回是让警卫知道条件失败。