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

使用signInWithCustomToken()认证Firestore遇权限拒绝问题求助

问题原因

你的Firestore规则中isValidUser函数要求request.auth.role == 'user',但云函数生成自定义token时,仅传入用户ID作为uid,未将role作为自定义声明添加到token中。这导致Firebase Auth验证后,用户对象不存在role字段,规则验证失败,触发权限拒绝错误。

最小改动解决方案

只需修改云函数中生成自定义token的代码,在createCustomToken方法中添加自定义声明参数,传入用户角色:

// 修改云函数的token生成逻辑
const firebaseToken = await admin.auth().createCustomToken(uuid, { role: 'user' });
return res.status(200).json({status: true, token: firebaseToken, id: uuid});
逻辑说明

当用户通过signInWithCustomToken登录后,Firebase Auth会自动解析token中的自定义声明,此时request.auth.role会被正确赋值为'user',Firestore规则中的isValidUser函数将返回true,权限验证通过。

可选验证方式(Flutter端)

若需确认自定义声明是否生效,可在登录后添加以下代码检查用户信息:

User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
  await user.getIdTokenResult().then((idTokenResult) {
    print('用户角色:${idTokenResult.claims?['role']}');
  });
}

若控制台输出用户角色:user,说明自定义声明已正确生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:30