更新如果我将我的api修改为retunr res.status(200)而不是res.status(401),那么我可以使用我的代码。 我猜测未处理的错误是因为我返回401,但是如果我将布局错误添加到我的.map中,我如何捕获并使用401?
我试图成为一名认证警卫。我的方法是请求一个api在服务器端做一些工作并返回一个json主体,其中一些用户信息和状态为true,如果无法验证webtoken,则返回false状态
在我的角度代码中我有
canActivate() {
return this.http.get(`http://localhost:3000/api/user/status`, options)
// return this.http.get(`/api/user/status`, options)
.map(res => {
if(!res){
this.router.navigate(['/login']);
return false;
}
let user: any = res.json();
return true;
})
}
如果我使用正确的令牌运行我的代码,我会得到页面身份验证。如果我修改了令牌,我的POSTMAN测试会返回status: false
,但是当我使用我的网站时,我会收到错误消息,说我有未处理的错误。
所以我尝试添加一个catch
.catch(e => {
this.router.navigate(['/login']);
return false;
})
但是我得到编译错误,说“类型的参数”(e:any)=> boolean'不能赋值给''的参数'(错误:任何,捕获:可观察)=> ObservableInput'。类型'布尔值'不能分配给'ObservableInput'类型。)“
有什么建议吗?
答案 0 :(得分:0)
我正在使用
.catch(e => {
this.router.navigate(['/login']);
return false;
})
但是CanActivate中的Observable需要一个可以用
传递的布尔值.catch(e => {
this.router.navigate(['/login']);
return Observable.of(false);
})