angular - 未在 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;
}
}
AuthServiceisAuthenticated
和getToken
方法
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');
}
我不知道我在做什么错,请帮助我。
解决方案
推荐阅读
- spring-security - 需要帮助使用 React-native、Spring Rest Api 和 ADFS 4.0 实施 OpenID 连接/OAuth2 流
- c++ - 在 Visual Studio 2019 中构建简单的点云可视化代码时,来自 PCL 的 3rd 方库的多个错误
- c++ - 有没有按不同按钮改变操作的功能
- node.js - 使用 tunnel-ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB
- php - xampp 中的 Laravel vhosts 设置仅适用于第一页
- python - 在 python 中为 svm 模型预处理图像
- javascript - javascript aviod 拆分子字符串
- javascript - 元素生成jquery后运行函数
- c - 使用 malloc 初始化 char 指针 VS 不使用 malloc 并直接将字符串分配给 char 指针
- javascript - 日期时间选择器在 Web 应用程序中不起作用