执行signUpUser函数时出现FirebaseError:权限缺失或不足
排查Firestore权限错误(Missing or insufficient permissions)
核心原因:Firestore规则字段名拼写错误
你的isValidUser函数中存在字段名拼写错误,导致数据验证失败,触发权限拒绝:
- 规则里写了
incomingData().firstname.size(),但实际提交的字段是first_name(下划线分隔) - 同样,
incomingData().lastname.size()应该是incomingData().last_name.size()
因为规则要求验证的字段不存在,直接导致isValidUser()返回false,最终allow create的条件不满足,抛出权限错误。
修复后的Firestore规则
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /Users/{userId}{ // 允许已认证用户创建符合格式的用户文档 allow create: if isValidToSignup() && isValidUser(); } function isValidToSignup(){ return request.auth.uid != null } function isValidUser() { return incomingData().first_name is string && incomingData().first_name.size() > 2 && incomingData().first_name.size() < 30 && incomingData().last_name is string && incomingData().last_name.size() > 2 && incomingData().last_name.size() < 30 && incomingData().mobile is string } function incomingData() { return request.resource.data; } } }
额外检查点
- 确认
signUpUser函数中的password变量已正确定义:你的函数参数里没有传入password,但调用createUserWithEmailAndPassword时用到了该变量,若未定义会导致用户创建失败,间接影响后续Firestore写入。 - 验证
created_date字段是否符合规则:规则中没有限制该字段,serverTimestamp()是合法的Firestore时间类型,不会触发验证问题。
内容的提问来源于stack exchange,提问作者abdou_dev
相关产品推荐
相关产品推荐

