Javascript 路由器防护装置可以激活,但不能与API一起工作

Javascript 路由器防护装置可以激活,但不能与API一起工作,javascript,angular,api,canactivate,Javascript,Angular,Api,Canactivate,此身份验证保护不使用API响应。当我运行代码时,它总是返回true。但我想根据api响应运行guard base。这是他们实现这一目标的途径吗 从'@angular/core'导入{Injectable}; 从'@angular/Router'导入{CanActivate,ActivatedRouteSnapshot,RouterStateSnashot,Router,Route}; 进口{ HttpClient, HttpHeader }来自“@angular/common/http”; 从

此身份验证保护不使用API响应。当我运行代码时,它总是返回true。但我想根据api响应运行guard base。这是他们实现这一目标的途径吗

从'@angular/core'导入{Injectable};
从'@angular/Router'导入{CanActivate,ActivatedRouteSnapshot,RouterStateSnashot,Router,Route};
进口{
HttpClient,
HttpHeader
}来自“@angular/common/http”;
从“rxjs”导入{Observable};
@可注射()
导出类AuthGuard实现了CanActivate{
构造函数(专用路由器:路由器,专用http:HttpClient){
}
canActivate(下一步:ActivatedRouteSnapshot,状态:RouterStateSnashot):可观察的|承诺|布尔值{
const sendData={};
sendData['id']=sessionStorage.getItem('id');
log(JSON.stringify(sendData));
const headers=新的HttpHeaders()
.set('Content-Type','application/json')
.set('token',sessionStorage.getItem('auth')?sessionStorage.getItem('auth'):'test');
this.http.post('http://127.0.0.1:5000/auth',
JSON.stringify(sendData){
标题
})
.订阅(
(val:any)=>{
},
响应=>{
this.router.navigate(['/login']);
},
() => {
log('POST observable现在已完成');
});
返回true;
}
}

看看这个。您在canActivateauthguard的末尾返回了true。这样,它将始终返回真值。相反,您应该根据您的条件将它放在http post请求的subscribe方法中。像这样的

this.http.post('http://127.0.0.1:5000/auth',
JSON.stringify(sendData), {
    headers
}).pipe(map(response => {
    //suppose we get isAuthenticated bit in response. Your response obj may vary but logic shall be same
    if (response.isAuthenticated) {
        return true;
    }
    else {
        return false;
    }
}));
谢谢。

看看这个。您在canActivateauthguard的末尾返回了true。这样,它将始终返回真值。相反,您应该根据您的条件将它放在http post请求的subscribe方法中。像这样的

this.http.post('http://127.0.0.1:5000/auth',
JSON.stringify(sendData), {
    headers
}).pipe(map(response => {
    //suppose we get isAuthenticated bit in response. Your response obj may vary but logic shall be same
    if (response.isAuthenticated) {
        return true;
    }
    else {
        return false;
    }
}));

谢谢。

很好,先生,我耽误了您的时间,无法返回。因为API调用有一定的响应时间。因为canActivate可以返回一个可观察到的或承诺,所以您不需要担心延迟。若你们愿意的话,你们可以钩住http post的订阅方法。好的,先生,我是如何延迟激活返回的。因为API调用有一定的响应时间。因为canActivate可以返回一个可观察到的或承诺,所以您不需要担心延迟。如果您愿意,可以钩住http post的订阅方法。