You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular拦截器拦截登录API问题——JWT学习阶段故障排查

解决JWT拦截器拦截登录API的问题

你的问题出在两个核心点:无token时未传递请求,以及未对登录接口做拦截排除,以下是具体修复方案:

1. 修复请求传递逻辑

当前代码中,当localStorage里没有token时,拦截器没有返回next.handle(req),导致登录请求被直接阻断,无法发送到后端生成token。必须在无token的分支里补充请求传递的逻辑,确保请求能继续流转。

2. 排除登录接口的拦截处理

登录接口本身不需要携带token,应该让拦截器跳过对它的处理。可以通过判断请求URL是否匹配登录接口路径来实现。

修改后的拦截器代码

import { catchError } from 'rxjs/operators';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from "@angular/common/http";
import { Injectable } from '@angular/core';
import { Router } from "@angular/router";
import { Observable, throwError } from 'rxjs';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

  // 定义登录接口路径,根据你的实际后端接口调整
  private loginApiPath = '/api/auth/login';

  constructor(private router: Router) {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{
    console.log("you are in interceptor");
    
    // 跳过登录接口的拦截处理
    if (req.url.includes(this.loginApiPath)) {
      return next.handle(req);
    }

    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if(token){
      console.log("token stored to the local store: "+token);
      // 克隆请求并添加Authorization头
      req = req.clone({
        setHeaders: {Authorization: `${token}`}
      });
      // 错误处理
      return next.handle(req).pipe(catchError(err=>{
        console.log("something wrong in interceptor");
        if(err instanceof HttpErrorResponse){
           console.log(err.status + ': token expired, login again');
           // token过期时跳转登录页(可选逻辑)
           this.router.navigate(['/login']);
        }
        return throwError(()=> new Error('Some Unknown Error'));
      }));
    }
    // 无token时,正常传递请求
    else {
      console.log("token not provided");
      return next.handle(req);
    }
  }
}

关键改动说明

  • 新增loginApiPath变量,用于匹配你的登录接口路径,需根据实际项目调整;
  • 增加URL判断逻辑,若请求是登录接口,直接跳过拦截处理;
  • 在无token的分支补充return next.handle(req),确保请求能正常发送到后端;
  • 补充了Router注入和token过期时跳转登录页的可选逻辑,可根据需求调整。

内容的提问来源于stack exchange,提问作者process handler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:52:41