使用AuthGuard的Angular HttpClient发布不起作用

时间:2019-02-26 13:43:18

标签: javascript angular post httpclient

我有以下问题; Observable始终返回undefined。 我认为我并没有真正需要使用HttpClient与AuthGuard一起工作。

canActivate(
  next: ActivatedRouteSnapshot,
  state: RouterStateSnapshot): Observable < boolean > {
  var bool
  var token = localStorage.getItem('Authorization');
  if (token != null) {
    this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData).subscribe(res => {
      if (!JSON.stringify(res).includes('AuthorizationNotFound')) {
        bool = true
      } else {
        bool = false
      }
    })
  } else {
    bool = false
  }
  console.log(bool)
  return observableOf(bool)
}

1 个答案:

答案 0 :(得分:0)

this.http.post是一个异步操作,因此您要在of(bool)被结果定义之前返回bool。重新说明一下,of(bool)在POST结束之前就已解决,并设置了bool的值。

相反,您可以map观察到布尔值的响应,然后直接将其返回。将您的if块更改为:

if (token != null) {
  return this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData)
             .map(res => !JSON.stringify(res).includes('AuthorizationNotFound'));
}

这将使POST可观察的地图直接映射到您要查找的布尔值。

不相关,但是如果您尚未关联,则应考虑向此调用添加错误处理逻辑,因为如果POST调用失败,您的防护就会中断。