用户登录获取的Firestore ID token调用REST API认证失败如何解决?
问题解决方案
你遇到的401认证错误核心由请求URL格式错误导致,配套排查步骤如下:
1. 修正Firestore REST API请求路径
Firestore REST API要求路径中必须指定数据库名称,默认数据库的固定标识为(default),你当前使用的URL缺失该段:
错误URL:
https://firestore.googleapis.com/v1/projects/${PROJECT_ID}/databases/documents
修正后的正确URL:
https://firestore.googleapis.com/v1/projects/${PROJECT_ID}/databases/(default)/documents
如果需要访问特定集合下的文档,直接在路径后拼接集合名/文档ID即可,例如访问users集合的完整路径为:
https://firestore.googleapis.com/v1/projects/${PROJECT_ID}/databases/(default)/documents/users
2. 配套排查项
如果修正URL后仍有报错,按以下顺序核对配置:
- 确认代码中填入的
PROJECT_ID、生成ID token时使用的API_KEY属于同一个Firebase项目,跨项目的凭证会被直接判定无效 - 检查
Authorization请求头格式:Bearer和token之间仅保留一个空格,token没有被截断、拼接多余字符 - 确认使用的是刚生成的
idToken,避免复用已经过期的凭证(idToken默认有效期为3600秒)
修正后的代码示例
const getDocsFromFirestore = async () => { const responseSignin = await getTokensBySigningIn(); // 仅修改此处URL即可 const URL_GET_FIRESTORE_DATABASES = `https://firestore.googleapis.com/v1/projects/${PROJECT_ID}/databases/(default)/documents`; const response = await fetch(URL_GET_FIRESTORE_DATABASES, { method: "GET", headers: { Authorization: `Bearer ${responseSignin.idToken}`, }, }); const responseFirestoreDB = await response.json(); console.log(responseFirestoreDB); };
你的Firebase安全规则配置没有问题,只要上述配置正确即可正常通过认证。
内容的提问来源于stack exchange,提问作者kada mati
相关产品推荐
相关产品推荐

