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

使用Firebase验证用户会话时触发auth/invalid-custom-token错误

问题原因及解决方案

你遇到的auth/invalid-custom-token错误核心原因是混淆了ID Token与自定义令牌(Custom Token)的用途:

  • getIdToken(true)获取的是Firebase Auth颁发的ID Token,作用是让客户端向服务器证明用户身份,并非自定义令牌。
  • signInWithCustomToken()仅接受后端通过Firebase Admin SDK生成的自定义令牌,直接传入ID Token必然触发无效令牌错误。

正确的会话验证方式

如果你的需求是验证用户ID Token的有效性,无需调用signInWithCustomToken,直接使用Firebase Admin SDK的verifyIdToken方法即可:

const admin = require('firebase-admin');

// 确保已完成Firebase Admin SDK初始化配置
async function validateUserToken(idToken) {
  try {
    // 验证并解码ID Token,获取用户信息
    const decodedToken = await admin.auth().verifyIdToken(idToken);
    // 验证通过,decodedToken包含用户UID、邮箱、过期时间等信息
    return decodedToken;
  } catch (error) {
    // 处理验证失败场景(如令牌过期、伪造等)
    console.error('令牌验证失败:', error.code);
    throw error;
  }
}

若需使用自定义令牌(自定义认证场景)

如果确实需要生成自定义令牌供客户端登录,需通过Admin SDK的createCustomToken方法生成:

// 从登录成功的userCredential中获取用户UID
const uid = userCredential.user.uid;
// 生成自定义令牌
const customToken = await admin.auth().createCustomToken(uid);
// 将customToken返回给客户端,即可用signInWithCustomToken完成登录
await signInWithCustomToken(auth, customToken);

核心概念区分

  • ID Token:短期有效令牌(默认1小时),由Firebase Auth自动颁发,用于客户端向后端证明身份,后端通过verifyIdToken验证即可。
  • 自定义令牌:由后端生成,用于对接自有用户系统等自定义认证场景,客户端通过它获取Firebase Auth的合法会话。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:57:36