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周岁:
- 出生年份加18小于当前年份,直接判定满18岁;
- 出生年份加18等于当前年份时,若生日月份早于当前月份,或月份相同但生日早于/等于当前日期,判定满18岁。
- 年龄≤80周岁:
- 出生年份加80大于当前年份,直接判定未超过80岁;
- 出生年份加80等于当前年份时,若生日月份晚于当前月份,或月份相同但生日晚于/等于当前日期,判定未超过80岁。
内容的提问来源于stack exchange,提问作者Aimn Blbol
相关产品推荐
相关产品推荐

