You need to enable JavaScript to run this app. Firestore安全规则如何校验自定义username claim的类型与长度
优惠活动
大模型
产品
解决方案
定价
更多

Firestore安全规则如何校验自定义username claim的类型与长度

Firestore Custom Claim 安全规则校验方案

实现说明

完全可以在Firestore安全规则中完成字符串类型校验、有效长度校验,所有判断由规则引擎本地完成,不会产生额外的数据库请求开销。

分步校验逻辑

  • 字符串类型校验:使用规则内置的类型判断语法request.auth.token.username is string即可完成校验。该判断会自动识别不存在的claim(值为null)、非字符串类型的异常claim值,直接拒绝不满足条件的请求,覆盖原有仅判断!= null的逻辑漏洞——比如claim被误存为数字、布尔值时,原非空判断会放行,但类型判断会直接拦截。
  • 有效长度校验:对已经通过类型判断的字符串值,可以直接调用内置.length属性获取长度,结合比较运算符即可自定义长度范围校验,比如要求用户名长度在2-20个字符之间,直接在判断条件中追加长度边界判断即可。

可直接复用的规则示例

针对游戏角色数据集合的访问规则,仅允许持有有效用户名claim的用户访问:

match /game_roles/{document=**} {
  allow read, write: if request.auth != null
    // 先校验类型,避免非字符串值触发长度读取错误
    && request.auth.token.username is string
    // 自定义有效长度范围
    && request.auth.token.username.length >= 2
    && request.auth.token.username.length <= 20;
}

规则编写注意点

  • 校验逻辑顺序不可颠倒:必须先完成字符串类型判断,再读取.length计算长度。如果对null、非字符串值直接读取.length,会触发规则求值错误,默认判定请求无权限。
  • 字符串的.length计算逻辑基于UTF-16编码单元,设置长度阈值时要和前端注册环节的用户名长度校验逻辑保持一致,避免出现校验不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 03:45:06