Angular HttpHeaderS JWT

时间:2017-12-01 13:05:00

标签: angular http-headers jwt

我正在尝试在我的Angular项目中实现JWT。在我的旧Angular 2应用程序没有问题。但是使用新的HttpHeaders它现在不起作用。我确信令牌不是null。我也尝试过Bearer或Token或Basic。

错误回复:

  

{“message”:“JsonWebTokenError:jwt必须提供”,“code”:“server_error”,“statusCode”:403}

createProject(project: Project) {
    let header = new HttpHeaders();
    header.append('Content-Type', 'application/json');
    header.append('Access-Control-Allow-Origin', '*');
    header.append('Authorization', environment.token);
    header.append('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    return this.http.post(environment.baseUrl + "project/create", project, {headers: header, responseType: "text"});
}

2 个答案:

答案 0 :(得分:1)

这应该适合您的情况:

+=

这是将所有createProject(project: Project) { const headers = new HttpHeaders().set('Content-Type', 'application/json') .append('Access-Control-Allow-Origin', '*') .append('Authorization', environment.token) .append('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); return this.http.post(environment.baseUrl + 'project/create', JSON.stringify(project), {headers: headers, responseType: 'text'}); } HttpHeadersset个调用链接在一起以获取一组标题。这适用于我所遇到的类似情况。以旧的方式做到这一点也让我感到头痛。

此外,您需要确保append是服务所期望的。通常类似于environment.token

答案 1 :(得分:0)

有点晚了,但是有了可行的解决方案,其背后的原因是“ HttpHeaders是不可变的” ,因此在幕后将它们克隆并应存储在对象中以备将来使用

enter image description here

1)因此,需要执行以下操作:

headers = headers.append('Content-Type','application/json');

2)这里要注意的另一点是:

  header.append('Access-Control-Allow-Origin', '*');
  header.append('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

允许访问在服务器端而不是请求端完成,因此这些标头是多余的。

3)如果我们想使用现有的头文件并添加/覆盖我按照以下方式完成的一些新头文件:

 setRequestHeaders(req: HttpRequest<any>): HttpHeaders {
    const headerSettings: { [name: string]: string | string[]; } = {};
    for (const key of req.headers.keys()) {
      headerSettings[key] = req.headers.getAll(key); // Read Existing headers
    }
    headerSettings[COMMON_CONSTANTS.HEADERS.AUTHORIZATION]
        : 'Bearer ' + this._cacheSvc.getFromSessionStorage(COMMON_CONSTANTS.ACCESS_TOKEN); // Add new Headers

   return new HttpHeaders(headerSettings); // final headers
}