首页 > 解决方案 > 未在 Angular 9 上调用 AuthGuard

问题描述

我试图在我的 Angular 9 项目上实现一个保护,以检查用户是否已通过身份验证,但该canActivate方法没有在我试图保护的“样本”路由上调用。

这是我试图实现警卫的主要模块:

const appRoutes: Routes = [
    ...
    {
        path      : 'sample',
        component: SampleComponent,
        canActivate: [AuthGuard]
    },
    ...
];

@NgModule({
    ...
    providers   : [
        AuthGuard,
        ...
    ],
    exports     : [
        RouterModule
    ]
})
export class AppModule
{
}

这是警卫班:

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

    constructor(
        public authService: AuthService,
        public router: Router
    ) { }

    canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
        if (this.authService.isAuthenticated !== true) {
            window.alert('Forbidden');
            this.router.navigate(['/auth/login']);
            return false;
        }
        return true;
    }
}

AuthServiceisAuthenticatedgetToken方法

    get isAuthenticated(): boolean {
        console.log('token' + this.getToken());
        if (this.getToken() === null) {
            return false;
        }else{
            return !this.jwtHelper.isTokenExpired(this.getToken());
        }
    }

    getToken(): string {
        return localStorage.getItem('access_token');
    }

我不知道我在做什么错,请帮助我。

标签: angularangular-ui-routerangular-router-guards

解决方案


推荐阅读