Ionic 3-Http Get 401(未经授权)

时间:2018-07-13 16:51:41

标签: http http-headers ionic3 jwt token

我正在使用令牌呼叫服务

Failed to load resource: the server responded with a status of 401 (Unauthorized)

Http failure response for http://localhost:65291/api/post: 401 Unauthorized 

相同的调用在带有标题的Postman中有效;

Content-Type: application/json
Authorization: Bearer token

离子中的功能是

getPosts() {
    var header = new HttpHeaders({ "Content-Type": "application/json" });
    header.append("Authorization", "Bearer " + this.token);
    console.log("Bearer " + this.token);
    return new Promise(resolve => {
      console.log(this.apiUrl + '/post');
      this.http.get(this.apiUrl + '/post', { headers: header}).subscribe((data: Post[]) => {
        resolve(data);
      }, err => {
        console.log(err);
      });
    });
  }

为令牌添加了日志,以确保将其正确添加到标头中(令牌很好)。 apiUrl变量的值为http://localhost:65291/api

这是怎么了? Cors已启用...邮递员工作正常...

谢谢

3 个答案:

答案 0 :(得分:0)

我认为您肯定有客户端方面的问题(因为它是401,而且您提到Postman也可以)。

当我尝试以与您相同的方式添加标题时,我遇到了类似的问题,因此建议您尝试这样做(以消除此问题):

getPosts() {
        // try forming headers object in one go:
        let token = "Bearer "+this.token
        let headers = new HttpHeaders({ 
            "Content-Type": "application/json",
            "Authorization": token
        });
        // now here I am not sure why you do promise wrapping this way, but then I would suggest:
        return this.http.get(this.apiUrl + '/post', { headers: headers })
            .toPromise()
            .then((data: Post[]) => { // Success
                console.log(data);
                resolve(data);
            }, (err) => {
                console.log(err);
            });
    }

如果问题仍然存在-请分享您使用的Angular和Http模块版本?

也可以在这里查看此问题:How to correctly set Http Request Header in Angular 2

如果您使用的是Angular 4.3+,请特别提供以下答案: How to correctly set Http Request Header in Angular 2

答案 1 :(得分:0)

过一会儿我发现了问题,

header.append(“ Authorization”,“ Bearer” + this.token);是错的。它使用了

let headers = new HttpHeaders({“ Authorization:” +“ Bearer” + this.token})

设置多个标题:

this.http
.post('api/items/add', body, {
  headers: new HttpHeaders({
    'Authorization': 'my-auth-token',
    'x-header': 'x-value'
  })
}).subscribe()

答案 2 :(得分:0)

我有一个类似的问题,它可以在启用邮递员和cors的情况下工作,但是在应用程序中不起作用,我的问题是我在API安全配置的URL末尾有/,发出没有/的请求,我只是将其从请求网址中删除, 您还可以在安全性配置中添加/*或将/放入您的应用中,URL必须相同。

(也许您已经解决了您的问题,这是另外一个问题,但这是可能的解决方案)