【发布时间】:2020-11-04 08:08:13
【问题描述】:
我正在尝试在 http 标头中添加自定义字段“Bearer-Token”。 将令牌添加为 'Authorization' : Bearer xyzqwerty 工作正常,但添加 'Bearer-Token': xyzqwerty 会引发错误
TypeError: Cannot read property 'length' of null
at HttpHeaders.applyUpdate (http.js:334)
at http.js:284
at Array.forEach (<anonymous>)
at HttpHeaders.init (http.js:280)
at HttpHeaders.forEach (http.js:378)
at Observable._subscribe (http.js:2362)
at Observable._trySubscribe (Observable.js:42)
at Observable.subscribe (Observable.js:28)
at subscribeToResult (subscribeToResult.js:9)
at MergeMapSubscriber._innerSub (mergeMap.js:59)
下面是我正在使用的拦截器的代码:
import { Injectable, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor } from '@angular/common/http'
import { AuthService } from './auth.service';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class TokenInterceptorService implements HttpInterceptor {
constructor(private injector: Injector) { }
intercept(req, next): Observable<HttpEvent<any>>{
let authService = this.injector.get(AuthService)
let tokenizedReq = req.clone(
{
headers: req.headers.set('Authorization', 'bearer ' + authService.getToken()),
}
)
let tokenizedReq1 = tokenizedReq.clone(
{
headers: tokenizedReq.headers.set('Bearer-Token', authService.getToken())
}
)
return next.handle(tokenizedReq1)
}
}
【问题讨论】:
-
为什么要分两步做呢?根据 angular.io/guide/http#setting-default-headers 使用 setHeaders。
-
这仍然不能解决我的问题。
-
你确定 AuthService.getToken() 返回类型和执行吗?
-
是的。如果我从代码中删除 Bearer-Token,它就会开始正常工作。
标签: javascript angular typescript http-headers