为什么我的API调用会从Ionic应用程序返回401而不是Postman?

时间:2017-05-13 22:24:29

标签: angular ionic2 ionic2-providers

我按照Smart of the Home的指导,在Ionic 2应用程序的提供程序中生成以下代码。

return new Promise(resolve => {
  // We're using Angular HTTP provider to request the data,
  // then on the response, it'll map the JSON data to a parsed JS object.
  // Next, we process the data and resolve the promise with the new data.
  let headers = new Headers();
  headers.append('Content-Type','application/vnd.alertme.zoo-6.1+json');
  headers.append('Accept','application/vnd.alertme.zoo-6.1+json');
  headers.append('X-Omnia-Client','Hive Web Dashboard');
  let options = new RequestOptions({ headers: headers });
  const body = JSON.stringify({
    "sessions": [{
      "username": "<username>",
      "password": "<password>",
      "caller": "WEB"
    }]
  });
  this.http.post('https://api.prod.bgchprod.info:443/omnia/auth/sessions', body, options)
    .map(res => res.json())
    .subscribe(data => {
      console.log(data)
    });
});

现在,当我尝试上面链接的教程的作者非常友好地提供Postman集合时,调用返回完全正常,但在通过应用程序触发时返回401。

检查所提出的请求,一切看起来都是一样的。我无法理解出了什么问题?

2 个答案:

答案 0 :(得分:1)

401表示未经授权,因此作者最有可能通过用户代理,IP或类似机制将Postman明确列入白名单,从而使您的自托管应用程序失败。

答案 1 :(得分:0)

对于任何不幸发现这些部分的人来说:

检查您的代码。核实。再次检查。最后一次。通过diff运行它。如果某件事在两个不同的地方做了两件不同的事情,但看起来完全相同,奥卡姆的剃刀会说解决方案是代码实际上并不相同,而且你只是屈服于缺乏睡眠和咖啡因的过度放纵。

这里的答案很简单。在我的代码中考虑教程中的'auth / sessions'与'auth / session'。两个不同的端点。