首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AuthGuard的Angular HttpClient帖子不起作用

使用AuthGuard的Angular HttpClient帖子不起作用
EN

Stack Overflow用户
提问于 2019-02-26 21:43:18
回答 1查看 71关注 0票数 0

我有以下问题: Observable总是返回undefined。我想我真的不知道如何使用HttpClient来与AuthGuard一起工作。

代码语言:javascript
运行
复制
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)
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 21:54:09

this.http.post是一个异步操作,因此在结果定义bool之前返回of(bool)。换句话说,甚至在POST结束之前就解析了of(bool),并设置了bool的值。

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

代码语言:javascript
运行
复制
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调用失败,您的保护将失效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54886873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档