我正在尝试在我的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"});
}
答案 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'});
}
HttpHeaders
和set
个调用链接在一起以获取一组标题。这适用于我所遇到的类似情况。以旧的方式做到这一点也让我感到头痛。
此外,您需要确保append
是服务所期望的。通常类似于environment.token
。
答案 1 :(得分:0)
有点晚了,但是有了可行的解决方案,其背后的原因是“ HttpHeaders是不可变的” ,因此在幕后将它们克隆并应存储在对象中以备将来使用
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
}