Angular拦截器失效:请求未携带Authorization头问题排查
解决AuthInterceptor在嵌套懒加载模块中失效的问题
排查与修复步骤
验证令牌获取逻辑
先确认AuthService.getToken()能返回有效令牌,可在拦截器中添加调试日志:intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { const token = this.authService.getToken(); console.log('当前获取的令牌:', token); // 调试用 const modifiedReq = req.clone({ setHeaders: { 'Authorization': token ? `Bearer ${token}` : '' } }); return next.handle(modifiedReq); }如果令牌为空,优先排查AuthService的令牌存储逻辑(如localStorage写入是否正常)。
禁止懒加载模块重复导入HttpClientModule
检查Layout模块和Book模块的imports数组,绝对不能在任何懒加载模块中导入HttpClientModule。一旦懒加载模块导入该模块,会创建独立的HttpClient实例,导致全局注册的拦截器无法作用于该实例。确认服务注入的单例性
检查AuthService的装饰器,确保是@Injectable({ providedIn: 'root' }),保证它是全局单例,拦截器能获取到正确的令牌实例。排查多拦截器的执行顺序
如果存在多个HTTP拦截器,注意providers数组中的注册顺序——先注册的拦截器先执行。若其他拦截器修改了Authorization头,可能会覆盖当前设置,可暂时移除其他拦截器测试,或调整注册顺序。排除请求特殊场景
- 浏览器自动发送的跨域OPTIONS预请求不会携带自定义头,属于正常现象,重点检查业务请求(如GET/POST)的请求头。
- 确保业务请求是通过Angular的
HttpClient发送的,拦截器仅对HttpClient发起的请求生效,原生fetch或其他HTTP库不受影响。
补充验证
在Book模块的组件中注入HttpClient发送请求,打开浏览器开发者工具的Network标签,查看请求头是否包含Authorization;或在拦截器中添加自定义测试头(如X-Test: interceptor-working),验证拦截器是否被触发。
内容的提问来源于stack exchange,提问作者devMan
相关产品推荐
相关产品推荐

