angular - 如何使用新的 httpClient 以角度处理未经授权的请求(状态为 401 或 403)
问题描述
我有守卫我的主页,如下所示。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}`)
});
}
解决方案
问题
疑似问题是——
通过警卫导航。所以最好从那里删除。
我猜情况是错误的。如果数据正常,则应返回 true,否则返回 false;
如果出现错误,则返回 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
})
);
}
推荐阅读
- ruby-on-rails - Ruby on Rails - 将用户和产品控制器链接在一起,不起作用
- ruby - 继承问题。NoMethodError:未定义的方法
- r - 单元格内带有部分粗体/斜体的可打印表格
- xamarin - Xamarin.iOS App 在设备上以调试模式运行时终止错误,在发布模式中退出但在模拟器中工作正常
- reactjs - 为什么我需要在 componentDidUpdate() 中带有 prevState 的 prevProps?
- c++ - 指针显式推导的C++14模板函数转发引用
- haskell - 堆栈安装/构建包
- ruby-on-rails - Michael Hartl 的 Rails 教程第 12 章 — 未定义的方法 `users'
- django - 将前端设置的值保存到 Django 数据库
- database - 这种数据访问模式是线程安全的吗?