Put方法返回未授权

时间:2018-06-06 23:39:56

标签: angular jwt

我是Angular的新人,我有这样的服务:

readonly rootUrl = "http://myapi.net/";

  private serviceUrl = "http://myapi.net/api/usuarios/listar";
  headers = new Headers({
    Authorization:
      "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
    "Content-Type": "application/json"
  });
  options = new RequestOptions({ headers: this.headers });

所以我得到了用户身份验证,然后我创建了如下方法:

constructor(private http: Http) {}
postSwitch() {
    var cambioEstatus = this.http
      .put(this.rootUrl + "api/usuarios/activar", this.options)
      .map((data: any) => data.json());
    return cambioEstatus;
  }

最后在组件中使用:

onFlagChange(event) {
    this.UsuariosService.postSwitch().subscribe(
      () => {
        //React to your HTTP request success
        this.toastr.success("Success");
      },
      err => {
        this.toastr.error("Fail");
        //React to your HTTP request error
      }
    );
  }

但是它总是返回错误401未经授权,如果我用邮递员执行它就不会引起错误。另一种方法(得到)如:

listarEmpresas() {
    var empresas = this.http
      .get(this.rootUrl + "api/empresas/listar", this.options)
      .map((data: any) => data.json());
    console.log(empresas);
    return empresas;
  }

不要抛出这个错误,我还需要为put行动做些什么?此致

Image

2 个答案:

答案 0 :(得分:1)

看起来像CORS问题,您需要在服务器上启用CORS或尝试添加  到你的标题。

Access-Control-Allow-Origin: * 

另外,请尝试根据您的请求传递正文。

postSwitch() {
var cambioEstatus = this.http
  .put(this.rootUrl + "api/usuarios/activar", body, this.options)
  .map((data: any) => data.json());
return cambioEstatus;

}

为了启用CORS进行测试,请使用以下chrome标志

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

答案 1 :(得分:0)

我遇到了同样的问题...我认为问题在于put需要一个请求正文,而get不需要,因此在url和选项之间,您需要一个正文,例如.get(this.rootUrl + "api/empresas/listar", {}, this.options)