首页 > 解决方案 > Angular httpHeaders post menthod 无法设置参数

问题描述

我正在尝试使用以下方法从 RestAPI 获取 authtoken。相同的 url、Params 和 Headers 会从邮递员那里得到正确的回复。但在角度我得到401未经授权的错误。请帮助我了解我做错了什么?我无法理解为什么我的标头位于httpHeaders中的lazyUpdate对象中。

提前致谢。

login(loginData) {
const httpOptions = {
  headers:new HttpHeaders().set("Authorization", "Basic " + btoa("username:password")).set("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8").set("access-control-allow-credentials",'true'),
  params:new HttpParams().set('username', loginData.email).set('password', loginData.password).set('grant_type', 'grant_type')
}
this.http.post('http://xx.xx.xx.xx:xxxxx/oauth/token', httpOptions).subscribe(
  data => {
    this.saveToken(data);
    return true;
  },
  err => {
    alert('Invalid Credentials')
    return false;
  });

}

请找到从浏览器发送的标头的附加屏幕截图。 在此处输入图像描述

标签: angularhttp-headershttpclientangular-httpclient

解决方案


使用 HTTP 标头选项作为发布请求中的第三个参数。

login(loginData) { 

    let httpOptions = {
        headers: new HttpHeaders({ 
            "Access-Control-Allow-Credentials": "true",
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
            'Authorization' :  "Basic " + btoa("username:password"),
            'username': loginData.email,
            'password': loginData.password,
            'grant_type': 'grant_type' 
        }) 
    };

    this.http.post('http://xx.xx.xx.xx:xxxxx/oauth/token', {},  httpOptions).subscribe( data => {
        this.saveToken(data);
        return true;
    },
    err => {
        alert('Invalid Credentials')
        return false;
    });

}

推荐阅读