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

Firebase规则配置:实现可登录无写入权限的单认证账户

实现Firebase只读认证账户的方案

要实现这个“登录后仅能读取数据、无法写入”的认证账户,我们可以通过自定义用户Claims配合Firebase安全规则来完成,具体步骤如下:

1. 给目标用户添加只读标记(自定义Claims)

首先,你需要给这个特定的认证账户打上一个“只读”的标记,Firebase允许我们通过自定义Claims来实现这一点。你有两种方式操作:

方式一:使用Firebase CLI手动设置

如果你只是给单个用户配置,用CLI最方便:

  1. 确保已经安装并登录Firebase CLI(如果没装,先跑npm install -g firebase-tools然后firebase login)
  2. 找到目标用户的UID:在Firebase控制台的「Authentication」→「用户」页面,复制该用户的UID
  3. 执行命令:
firebase auth:set-custom-claims --uid YOUR_USER_UID '{"readonly": true}'

方式二:用Admin SDK批量/自动化设置

如果需要批量处理或者在代码中动态设置,可以用Firebase Admin SDK(以Node.js为例):

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

// 设置用户的只读Claims
admin.auth().setCustomUserClaims('YOUR_USER_UID', { readonly: true })
  .then(() => {
    console.log('只读标记已成功添加到用户');
  })
  .catch((error) => {
    console.error('设置Claims失败:', error);
  });

2. 修改Firebase安全规则

接下来,修改你的数据库规则,让系统识别这个只读标记,拒绝该用户的写入请求。把原来的规则改成:

{
  "rules": {
    ".read": true,
    ".write": "auth != null && !auth.token.readonly"
  }
}

规则解释:

  • .read: true 保持不变,满足你“所有人可读取数据”的需求
  • .write: 现在要求**用户已认证,并且用户的自定义Claims中没有readonly标记(或者readonly为false)**才能写入数据。也就是说,被打上readonly: true的用户,即使登录了也无法执行写入操作。

验证效果

设置完成后,用这个只读账户登录你的应用,尝试执行写入操作(比如添加/修改数据),Firebase会自动拒绝该请求;而其他没有设置readonly标记的认证账户,依然可以正常写入数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:44