firebase - Flutter - 您的 Cloud Firestore 数据库具有不安全的规则
问题描述
我有一个名为users的集合,我正在检查新用户手机号是否存在。如果它存在,那么我正在为该用户执行电话身份验证,然后将 uid 作为字段存储在文档中。
如果用户是第一次来,他没有经过身份验证,我正在从用户集合中执行读取操作。现在,每次我收到您的 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;
}
}
}
解决方案
您可以更改规则以添加更多安全性,如下所示:
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
推荐阅读
- java - 在 Java 中重复接受相同的套接字连接请求
- javascript - 如何从 WordPress 解析 Node Express 会话
- python - 即使在调整了密集层、激活层和层数之后,损失也被卡住并且准确度低于 0.01
- .net - TokenValidationParameters 类的属性有什么意义
- sql - 有没有更好的方法从 Oracle 表中检索随机行?
- python - 如何使用 StringIO 从内存中以 CSV 格式发送数据帧
- python - 我正在尝试使用 Python 库 pyral 在 CA Rally 中上传测试用例,测试用例已成功上传,但无法为测试用例设置所有者
- javascript - 无法在 Angular 7 中触发 SVG 上的鼠标事件
- java - 在最近的 android 更新后无法从 Uri 创建文件
- rxjs - 如何从课堂上启用可观察的