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

时间:2020-01-31 13:51:09

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

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

如果用户是第一次来,则该用户未通过身份验证,我正在执行 users 集合中的读取操作。现在,每次我收到您的Cloud Firestore数据库具有来自Google的不安全规则电子邮件时。

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

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

1 个答案:

答案 0 :(得分:2)

您可以更改规则,从而增加安全性,例如:

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中的 [您的项目]

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

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