我有一个伪造的后端API,在我的代码中,我检查了标头令牌。这是我的假后端代码:
if (connection.request.url.endsWith('/api/orders') &&
connection.request.method === RequestMethod.Get) {
if (connection.request.headers.get('Authorization') === 'Bearer '
+ token) {
connection.mockRespond(new Response(
new ResponseOptions({ status: 200, body: [1, 2, 3] })
));
} else {
connection.mockRespond(new Response(
new ResponseOptions({ status: 401 })
));
}
在我的服务中,我有一个GET方法,该方法将标头添加到请求中以获取数据。
getOrders(){
let token = localStorage.getItem('token');
let headers = new HttpHeaders()
headers = headers.set('Authorization', 'Bearer ' + token);
return this.http.get('/api/orders' , {headers:headers} ).subscribe(result=>{
console.log('result : ' , result);
});
}
但是,我什么也没得到,结果是空的。状态代码是401,但我无法根据标题获取数据。我该如何解决这个问题?
答案 0 :(得分:0)
我终于找到了答案。在Angular 7中,向请求添加标头的最佳方法是使用拦截器。在拦截器中,您可以将标头添加到请求中,从而可以访问受保护的API。这是将标头添加到请求的拦截器示例:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let currentUser = this.authservice.currentUser;
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request)