如何在 Angular 中设置拦截器 header 6
How to setup interceptor header in Angular 6
我正在尝试让拦截器工作,但是我遇到了一个问题,我不知道 ti 在哪里。这是我的拦截器代码:
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { AuthenticationService } from './../_services/index';
import { Observable } from 'rxjs/Observable';
import { AuthGuard } from './../_guards/auth.guard';
@Injectable()
export class Interceptor implements HttpInterceptor {
constructor(public auth: AuthGuard) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.auth.getToken()) {
console.log(this.auth.getToken());
request = request.clone({
setHeaders: {
Authorization: this.auth.getToken()
}
});
}
return next.handle(request);
}
}
每次尝试请求时,我都会看到 :
Failed to load http://localhost:5000/api/stocks?all=true: Response for preflight is invalid (redirect)
core.js:1633 ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}
如果我删除拦截器,则会进行额外的调用,并且我得到 401 作为 但我仍然收到错误。
如果我删除拦截器和在服务器上进行身份验证的要求,请求将变为 (PS:请忽略这些不相关的错误)。
所以我假设这不是 CORS 问题。有什么想法吗?
您在预检时获得了重定向 - 因此请求被中止。正如您还看到的,您在非选项请求上收到了 301。我可以得出结论,服务器未配置为正确允许 CORS - 它应该将简单的答案推送到 OPTIONS 请求(或故意拒绝它),但它没有这样做 - 相反,服务器正在像 GET 请求一样重定向。
PREFLIGHT 请求不是您可以控制的 - 它们是由浏览器发出的,服务器必须正确处理这些请求 - 否则浏览器将拒绝执行此类请求。
我正在尝试让拦截器工作,但是我遇到了一个问题,我不知道 ti 在哪里。这是我的拦截器代码:
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { AuthenticationService } from './../_services/index';
import { Observable } from 'rxjs/Observable';
import { AuthGuard } from './../_guards/auth.guard';
@Injectable()
export class Interceptor implements HttpInterceptor {
constructor(public auth: AuthGuard) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.auth.getToken()) {
console.log(this.auth.getToken());
request = request.clone({
setHeaders: {
Authorization: this.auth.getToken()
}
});
}
return next.handle(request);
}
}
每次尝试请求时,我都会看到
Failed to load http://localhost:5000/api/stocks?all=true: Response for preflight is invalid (redirect)
core.js:1633 ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}
如果我删除拦截器,则会进行额外的调用,并且我得到 401 作为
如果我删除拦截器和在服务器上进行身份验证的要求,请求将变为
所以我假设这不是 CORS 问题。有什么想法吗?
您在预检时获得了重定向 - 因此请求被中止。正如您还看到的,您在非选项请求上收到了 301。我可以得出结论,服务器未配置为正确允许 CORS - 它应该将简单的答案推送到 OPTIONS 请求(或故意拒绝它),但它没有这样做 - 相反,服务器正在像 GET 请求一样重定向。
PREFLIGHT 请求不是您可以控制的 - 它们是由浏览器发出的,服务器必须正确处理这些请求 - 否则浏览器将拒绝执行此类请求。