使用Firebase Functions验证ID Token时遭遇500内部服务器错误
解决Firebase Function验证ID Token时的500内部服务器错误
核心代码错误修正
你的Node.js函数代码存在两处关键错误,直接导致了500内部服务器错误:
- 未导入
onRequest触发器:onRequest是Firebase Functions的HTTP触发方法,需要从firebase-functions模块显式导入 - 错误的Auth服务调用方式:
app.Auth()写法错误,正确调用应为admin.auth()(注意小写,需调用admin实例的auth服务,而非initializeApp返回的app对象)
修正后的完整函数代码:
const { initializeApp } = require('firebase-admin/app'); const { onRequest } = require('firebase-functions/v2/https'); const admin = require("firebase-admin"); const serviceAccount = require("path/to/serviceAccountCred.json"); initializeApp({ credential: admin.credential.cert(serviceAccount) }); exports.verifyToken = onRequest((req, res) => { const { uid, token } = req.query; if (!uid || !token) { res.status(400).send('Paramètres manquants : uid et token sont requis.'); return; } admin.auth().verifyIdToken(token) .then((decodedToken) => { if (decodedToken.uid === uid) { res.status(200).send('Token valide.'); } else { res.status(401).send('Token invalide.'); } }) .catch((error) => { console.error('Token验证失败:', error); // 认证类错误应返回401而非500,同时输出详细信息便于排查 res.status(401).send(`Token验证失败: ${error.message}`); }); });
额外排查要点
如果修正后仍出现错误,可检查以下内容:
- ServiceAccount文件路径:确保
path/to/serviceAccountCred.json是正确的相对路径,部署时该文件需与函数代码在同一目录下 - 查看Firebase函数日志:登录Firebase控制台,进入Functions页面查看具体错误日志,日志会显示500错误的详细原因(如权限配置错误、SDK初始化失败等)
- Flutter端Token有效性:确认
getIdToken()获取到的是有效ID Token,可在代码中打印token值,避免传入空字符串或过期token - 重新部署函数:修改代码后需执行
firebase deploy --only functions命令,确保最新代码已部署到云端
内容的提问来源于stack exchange,提问作者swann.wlm
相关产品推荐
相关产品推荐

