为啥我的电话身份验证安全规则不起作用?
Posted
技术标签:
【中文标题】为啥我的电话身份验证安全规则不起作用?【英文标题】:Why my Phone authentication security rules not working?为什么我的电话身份验证安全规则不起作用? 【发布时间】:2021-11-14 09:36:45 【问题描述】:我正在使用 Firestore,但我的安全规则不起作用!我想根据登录的用户访问数据库,我的结构看起来像这样,用户/用户 ID/用户的集合。 登录用户只能访问自己的数据/userId/他们自己的数据。
我的安全规则:
rules_version = '2';
service cloud.firestore
match /databases/database/documents
match /user/userId
allow read, write: if request.auth.uid == userId;
match /subCollections=**
allow read, write: if request.auth.uid == userId;
注意:同样的 & 代码结构适用于电子邮件和密码身份验证,但不适用于电话身份验证。
【问题讨论】:
尝试将规则设置为allow read, write: if request.auth != null;
。如果仍然失败,那么您可能还没有登录。
request.auth != null 确实有效,但这并不安全。因为我想将请求的身份验证与用户 ID(文档)进行比较。
什么“不起作用”?
request.auth.uid == userId
【参考方案1】:
更新
request.auth.token.sub
用于实时数据库
request.auth.uid
用于 Firestore
确保您在每个数据库中使用正确的信息和参数,并且在访问数据请求之前用户已成功登录。
来源:https://firebase.google.com/docs/rules/rules-and-auth#leverage_user_information_in_rules
【讨论】:
是的,我也使用 request.auth.uid 做到了这一点。但没有工作,我按照你提到的文档进行操作,但问题仍然存在。 您可以为用户创建一个最小的项目来重新创建问题吗?如果无法在本地重新创建它,我们无法找出问题所在。否则我会建议联系 firebase 支持,但他们也需要一个最小的项目,但他们不会从源代码编译项目。【参考方案2】:问题解决了!当我联系firebase支持时,他们告诉我我在模拟中遇到的错误是因为ID与请求的ID不匹配,这很明显。所以我的错误是我在路径区域上使用了通配符,例如 user/userId 而不是 user/randomId324234.... 现在它按预期工作。
【讨论】:
以上是关于为啥我的电话身份验证安全规则不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 电话身份验证在 APK 发布模式下不起作用
Firebase Listener 在某些用户通过电话身份验证登录期间不起作用