为啥我的电话身份验证安全规则不起作用?

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 发布模式下不起作用

Flutter Firebase 电话身份验证不起作用

firebase电话身份验证在发行版中不起作用[重复]

Firebase Listener 在某些用户通过电话身份验证登录期间不起作用

Firebase 电话身份验证 (Flutter) 在某些 iOS 设备中不起作用

使用 Vue.js 的 Firebase 电话号码身份验证不起作用