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

Firestore用户集合生日字段安全规则:需验证年龄18-80岁

Firestore用户年龄验证安全规则修正

你的原规则问题在于直接以当前日期的月日为基准计算18/80年前的日期,没有结合用户生日的月日进行判断,导致在生日前后的边界场景下出现错误。比如当前日期早于用户生日时,会错误拒绝未满80岁的用户,或错误允许未满18岁的用户。

修正后的规则通过直接对比生日的年、月、日与当前日期的关系,精准判断用户是否符合18-80周岁的要求:

match /users/{userId} {
  allow create, update: if 
    let birthdate = request.resource.data.birthdate;
    let now = request.time;
    // 验证年龄≥18周岁
    (birthdate.year() + 18 < now.year() || 
     (birthdate.year() + 18 == now.year() && 
      (birthdate.month() < now.month() || 
       (birthdate.month() == now.month() && birthdate.day() <= now.day())))) &&
    // 验证年龄≤80周岁
    (birthdate.year() + 80 > now.year() || 
     (birthdate.year() + 80 == now.year() && 
      (birthdate.month() > now.month() || 
       (birthdate.month() == now.month() && birthdate.day() >= now.day()))));
}

规则逻辑说明

  • 年龄≥18周岁:
    1. 出生年份加18小于当前年份,直接判定满18岁;
    2. 出生年份加18等于当前年份时,若生日月份早于当前月份,或月份相同但生日早于/等于当前日期,判定满18岁。
  • 年龄≤80周岁:
    1. 出生年份加80大于当前年份,直接判定未超过80岁;
    2. 出生年份加80等于当前年份时,若生日月份晚于当前月份,或月份相同但生日晚于/等于当前日期,判定未超过80岁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:35