Angular拦截器生效时间

来源:7-4 实战认证信息流

starkShang

2019-04-23

我自定义了一个Angular拦截器,用于在请求中增加Authorization头,但是它的行为和我预期的不一致。
我的server和client是两个域名,因此打开了CROS,每个请求会先发出一个OPTIONS
的请求,不知道会不会影响拦截器的行为,这里交代一下。
拦截器的行为如下:

  1. 对于server端没有保护的api,拦截器工作正常,并且请求中存在Authorization头;
  2. 对于server端进行保护的api,拦截器无效,在请求头中看不见Authorization头;
    请教老师这是怎么回事?
写回答

3回答

接灰的电子产品

2019-04-25

你打印一下每种情况下这个 authService.userAvaliable 值

0
0

starkShang

提问者

2019-04-24

import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from "@angular/common/http";
import { Observable } from "rxjs";
import { MesignAuthService } from "../services/auth.service";
@Injectable()
export class MesignAuthInterceptor implements HttpInterceptor {
    constructor(private authService: MesignAuthService) { }
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (this.authService.userAvaliable) {
            console.log("MesignAuthInterceptorAuthorization");
            request = request.clone({
                setHeaders: {
                Authorization: `${this.authService.user.token_type} ${this.authService.user.access_token}`
                }
            });
        }
        return next.handle(request);
    }
}

如果是访问未被保护的资源,则会携带token:

//img.mukewang.com/szimg/5cc0709e000143b009090368.jpg

如果是访问被保护资源,则没有携带token:

//img.mukewang.com/szimg/5cc0712b0001754309070201.jpg

0
0

接灰的电子产品

2019-04-24

不会影响的,代码贴出来看一下

0
1
starkShang
我把回复放在下面的回答里
2019-04-24
共1条回复

Angular打造企业级协作平台,让你在Angular领域中出类拔萃

全网首个介绍官方 Material 组件库用法与 Redux 在 Angular 中的应用

998 学习 · 536 问题

查看课程