为什么手机认证(Phone Authentication)下Firestore安全规则不生效?
Firestore 手机认证场景安全规则不生效排查方案
- 优先核对用户ID匹配逻辑:打印手机认证成功后返回的uid,与/user路径下的对应文档ID做逐字符比对。常见错误是开发时误将手机号作为用户文档ID存储,而Firebase Phone Auth生成的uid是与手机号无直接关联的独立字符串,和邮箱密码认证生成的uid规则一致,不会直接使用手机号作为uid取值。
- 优化安全规则写法:你当前的规则逻辑本身无错误,可添加空鉴权判断避免偶发异常,优化后参考代码如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /user/{userId}/{document=**} { allow read, write: if request.auth != null && request.auth.uid == userId; } } }
新增的request.auth != null判断可以避免未登录请求、或者auth状态未同步完成的请求触发空值匹配异常,减少误拦截。
- 清除客户端请求缓存:手机端登录成功后,可主动调用Firestore的
disableNetwork()后再调用enableNetwork()方法,强制刷新请求的鉴权上下文,避免复用之前未登录状态下的缓存请求信息。 - 调整请求触发时机:所有Firestore读写请求必须在
FirebaseAuth.AuthStateListener的登录成功回调中触发,不要在短信验证提交完成后立刻发起请求,此时全局auth状态还未同步完成,请求携带的鉴权信息为空会被规则拦截。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

