使用Firebase实时数据库REST API时遭遇401错误求助
解决Firebase实时数据库REST API 401认证问题
问题核心
你通过Google Provider认证后拿到的Token,和Firebase实时数据库规则要求的Firebase用户身份凭证不匹配,导致规则校验失败返回401。把用户加到项目「用户与权限」是绕开了Firebase规则,用IAM权限直接放行,这不符合按用户UID隔离数据的业务逻辑。
解决步骤
获取正确的Firebase ID Token
登录成功后,不要使用Google OAuth的access token,而是从Firebase用户实例中获取ID Token:// Vue.js中获取Firebase ID Token示例 const currentUser = firebase.auth().currentUser; if (currentUser) { const idToken = await currentUser.getIdToken(); // 用这个idToken发起数据库请求 }正确传递Token到API
Firebase实时数据库REST API支持两种合法的Token传递方式,任选其一即可:- 方式一:使用Authorization请求头(推荐)
将ID Token放在Authorization头中,格式为Bearer <你的ID Token>:// Axios请求示例 axios.get(`https://rtdb-url/${currentUser.uid}/products.json`, { headers: { 'Authorization': `Bearer ${idToken}` } }); - 方式二:使用URL参数
参数名必须用auth而非access_token,将ID Token作为参数值:https://rtdb-url/用户实际uid/products.json?auth=[Firebase ID Token]
- 方式一:使用Authorization请求头(推荐)
验证URL中的UID一致性
确保请求URL里的uid和当前用户的currentUser.uid完全一致,规则中的$uid === auth.uid校验才会生效。
为什么加IAM权限能生效?
当你把用户加到项目「用户与权限」时,相当于给该Google账号赋予了项目级IAM权限,此时Firebase会跳过规则校验,直接用IAM权限判断是否允许访问。但这会导致规则失效,任何拥有该权限的用户都能访问所有数据,违背了你按用户UID隔离数据的初衷。
内容的提问来源于stack exchange,提问作者Ahikam
相关产品推荐
相关产品推荐

