如何在 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 请求不是您可以控制的 - 它们是由浏览器发出的,服务器必须正确处理这些请求 - 否则浏览器将拒绝执行此类请求。