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

如何在Axios拦截器中获取Firebase 9的ID Token并解决初始用户为空问题

在Axios拦截器中安全获取Firebase 9 ID Token的解决方案

问题根源

Firebase Auth的用户状态初始化是异步的,页面加载初期currentUser会为null,直接调用currentUser.getIdToken()会触发TypeError导致请求崩溃。Firebase 9和8的核心逻辑一致,只是API导入方式不同,之前的Firebase 8代码可能只是未触发异步加载的边界场景。

解决方案1:等待用户状态加载完成

封装一个异步函数,确保获取到用户实例后再继续请求流程:

import axios from "axios";
import config from "../config";
import { getAuth, onAuthStateChanged } from "firebase/auth";

const API = axios.create({
  responseType: "json",
  baseURL: config.ApiUrl
});

// 封装等待用户加载完成的工具函数
const waitForAuthUser = () => {
  return new Promise((resolve) => {
    const auth = getAuth();
    // 用户已加载完成,直接返回
    if (auth.currentUser) {
      resolve(auth.currentUser);
    } else {
      // 监听用户状态变化,获取到用户后结束监听并返回
      const unsubscribe = onAuthStateChanged(auth, (user) => {
        resolve(user);
        unsubscribe();
      });
    }
  });
};

API.interceptors.request.use(async (request) => {
  const currentUser = await waitForAuthUser();

  if (currentUser) {
    const idToken = await currentUser.getIdToken();
    // 合并原有headers,避免覆盖默认配置
    request.headers = {
      ...request.headers,
      Authorization: `Bearer ${idToken}`
    };
  }

  // 未登录时返回原请求,可根据业务需求调整(比如抛出错误、跳转登录页)
  return request;
});

解决方案2:直接处理null边界情况

如果不需要强制等待用户登录,仅在用户存在时添加Token:

import axios from "axios";
import config from "../config";
import { getAuth } from "firebase/auth";

const API = axios.create({
  responseType: "json",
  baseURL: config.ApiUrl
});

API.interceptors.request.use(async (request) => {
  const auth = getAuth();
  const currentUser = auth.currentUser;

  if (currentUser) {
    // getIdToken会自动刷新过期的Token,无需手动处理刷新逻辑
    const idToken = await currentUser.getIdToken();
    request.headers.Authorization = `Bearer ${idToken}`;
  }

  return request;
});

注意事项

  • 不要直接覆盖request.headers,使用扩展运算符合并原有配置,避免丢失默认请求头。
  • getIdToken()方法会自动检查Token是否过期,若过期会自动刷新并返回新Token,无需额外处理刷新逻辑。
  • 若业务要求必须登录才能发起请求,可在currentUser为null时抛出错误或跳转登录页,终止请求流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:40:18