Firebase可否设置数组型Custom Claims并在实时数据库规则中校验
Firebase 数组格式Custom Claims与Realtime Database权限校验实现方案
你遇到的报错核心原因是:Firebase Realtime Database 安全规则未提供数组类型的contains内置方法,所以你写的规则会触发语法错误,你要的需求可以通过以下两种方案实现:
方案一(官方推荐):调整Custom Claims存储结构
把数组格式的角色改为键值对对象格式,校验逻辑更简单、查询性能更高:
- Custom Claims设置格式调整为:
{ "roles": { "ROLE_A": true, "ROLE_B": true } }
- 对应安全规则写法:
".read": "auth != null && auth.token.roles.ROLE_A === true"
方案二:保留数组格式的Custom Claims,调整规则校验逻辑
如果业务场景确实需要用数组存储角色,使用安全规则内置的indexOf方法实现存在性判断即可:
".read": "auth != null && auth.token.roles.indexOf('ROLE_A') !== -1"
注意事项
- Custom Claims总大小不能超过1000字节,避免存储过多角色导致设置失败
- 更新用户Custom Claims后,客户端需要调用
getIdToken(true)强制刷新用户凭证,新的claims才会生效
内容的提问来源于stack exchange,提问作者Rachid
相关产品推荐
相关产品推荐

