Flutter - 您的 Cloud Firestore 数据库有不安全的规则

vik*_*dey 0 firebase firebase-security flutter google-cloud-firestore

我有一个名为users 的集合,我正在检查新用户的手机号码是否存在。如果它存在,那么我正在为该用户执行电话身份验证,然后将 uid 存储为文档中的字段。

如果用户是第一次来,他没有经过身份验证,我正在从用户集合中执行读取操作。现在,每次我收到来自 google 的Your Cloud Firestore Database has insecure Rules电子邮件时。

以下是我正在使用的规则。请让我知道如何确保其安全。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

vti*_*ado 8

您可以更改规则以添加更多安全性,如下所示:

\n\n
rules_version = \'2\';\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /{document=**} {\n      allow read, write: if request.auth != null;\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,那么您的应用程序将无法从 Firebase 读取,因为您告诉我们即使读取也需要进行身份验证。

\n\n

我解决了这个问题,允许用户在 Firebase 中进行匿名身份验证。为此,请访问:

\n\n

https://console.firebase.google.com/project/[您的项目]/authentication/providers

\n\n

并启用匿名方法。请记住更改URL 中的[YOUR-PROJECT] 。

\n\n

之后,您只需在主屏幕或任何您想要的内容中添加几行代码。

\n\n

1) 导入Firebase Auth 包

\n\n
import \'package:firebase_auth/firebase_auth.dart\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

2) 在主StatefulWidget的开头添加以下代码:

\n\n
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;\n    Future<FirebaseUser> signInAnon() async {\n        AuthResult result = await firebaseAuth.signInAnonymously();\n        FirebaseUser user = result.user;\n        print("Signed in: ${user.uid}");\n        return user;\n    }\n    void signOut() {\n        firebaseAuth.signOut();\n        print(\'Signed Out!\');\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

3) 现在你只需调用 initState 中的函数即可:

\n\n
signInAnon().then((FirebaseUser user){\n     print(\'Login success!\');\n     print(\'UID: \' + user.uid);\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

瞧\xc3\xa1!现在,每个用户都将在您的 Firebase 数据库中自动进行匿名身份验证。最好的部分是用户会一直使用该应用程序,直到您卸载它或删除缓存数据。

\n\n

这是一个解释步骤的视频,但使用了我为我的项目和此示例删除的登录屏幕:https://www.youtube.com/watch ?v=JYCNvWKF7vw

\n