【问题标题】:Flutter - Your Cloud Firestore database has insecure rulesFlutter - 您的 Cloud Firestore 数据库有不安全的规则
【发布时间】:2020-05-17 04:50:35
【问题描述】:

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

如果用户是第一次来,他没有经过身份验证,我正在从 users 集合执行读取操作。现在每次我收到来自谷歌的您的 Cloud Firestore 数据库的规则不安全

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

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

【问题讨论】:

  • 您数据库中的所有数据现在可供全球任何人读取,而您不知道他们是谁。如果您在数据库中存储有关/来自用户的任何个人信息,那肯定是不安全的。如何保护数据取决于您的应用程序和数据库结构,这不是我们可以合理为您做的事情。我强烈建议您查看有关安全规则的 Firebase 文档,然后自己开始。如果您在某个地方遇到困难,请回复一个更具体的问题,我们可以尝试提供更具体的帮助。
  • 最简单的安全访问方法是allow read: if false;,但这不太可能是您想要的。另请参阅:firebase.google.com/docs/rules/insecure-rules

标签: firebase flutter google-cloud-firestore firebase-security


【解决方案1】:

您可以像这样更改规则以增加安全性:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

但是,您的应用将无法从 Firebase 中读取数据,因为您说即使读取也需要进行身份验证。

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

https://console.firebase.google.com/project/[YOUR-PROJECT]/authentication/providers

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

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

1) 导入 Firebase 身份验证包

import 'package:firebase_auth/firebase_auth.dart';

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

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

3) 现在您只需在 initState 中调用该函数:

signInAnon().then((FirebaseUser user){
     print('Login success!');
     print('UID: ' + user.uid);
});

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

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

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2021-07-14
    • 2018-04-05
    相关资源
    最近更新 更多