如何处理未经授权的请求(状态为 401 或 403)与新的 httpClient 在角度



我已经像下面这样保护我的主页。checkTokenValidation是我检查来自服务器的令牌验证的方法。当服务器响应为 false 时,我的代码似乎停止了,map中的所有内容都不再工作。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.authService.checkTokenValidation().pipe(
map((data) => {
if (data['ok']) {
this.router.navigate(['/overview']);
return false;
} else {
return true;
}
},
(error: string) => {
console.log(error);
})
);
}

这是我的checkTokenValidation代码:

checkTokenValidation() {
const token = this.getToken();
return this.httpClient.get('http://185.69.54.21/back_end/web/site/check-token', {
headers: new HttpHeaders().append('Authorization', `Bearer ${token}`)
});
}

问题

疑似问题有 -

  1. 在卫兵中导航。所以最好从那里删除。

  2. 我猜条件不对。如果数据正常,那么它应该返回真,否则为假;

  3. 如果出现错误,则返回 false;

修改后的代码

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.authService.checkTokenValidation().pipe(
map((data) => {
if (data['ok']) {
//this.router.navigate(['/overview']); //<-- remove this.
return true; //<- return true if response is ok
} else {
return false;  //<- return false if response is not ok
}
},
(error: string) => {
console.log(error);
return false;   //<- return false in case of error
})
);
}

最新更新