目标:用户应可以访问已登录用户的文档。
集合结构:
> root(collection_name)
> user1@gmail.com(document_name)
> "name" : "User One"(field key and value)
> user2@gmail.com
> "name" : "User TWO"
我使用的Android代码
db.collection("/root/")
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
System.out.println(document.getId() + " => " + document.getData());
}
} else {
System.out.println(task.getException());
}
});
我尝试过的数据库规则:
service cloud.firestore {
match /databases/{database}/documents {
match /root/{email} {
allow read, update, delete: if request.auth.token['email'] == email;
allow create: if request.auth != null;
}
}
}
我收到的错误:
com.google.firebase.firestore。FirebaseFirestoreException:PERMISSION_DENIED:缺少权限或权限不足。
侦听查询(目标 = 查询(按名称的根顺序);limitType=LIMIT_TO_FIRST) 失败:状态{代码=PERMISSION_DENIED,描述=缺少或权限不足,原因=null}
我也试过用
service cloud.firestore {
match /databases/{database}/documents {
match /root/{email} {
allow read, update, delete: if request.auth!=null;
allow create: if request.auth != null;
}
}
}
上面的规则返回集合中的所有文档,但我只希望它返回登录的特定用户的文档。所以我知道问题在于检查用户的电子邮件。
当您使用以下规则时:
match /root/{email} {
allow read, update, delete: if request.auth.token['email'] == email;
allow create: if request.auth != null;
}
这意味着您只允许经过身份验证的用户在您所指向的位置(即用户的文档)读取、更新或删除数据。但是,在代码中,您从整个“根”集合请求数据:
db.collection("/root/").get()
因此,该错误消息。若要解决此问题,请更改代码中的查询,或更改规则。但最有可能的是,您应该使用以下参考来更改获取数据的方式:
db.collection("root").document(userEmail).get().addOnCompleteListener(/* ... /*);
我已经创建了一个android应用程序,并使用firebase作为电子邮件注册和认证的手段。注册后,用户可以在数据库中存储库存项目。所以我的问题是,如何设置firebase身份验证规则,以便特定用户只能访问他们输入的数据。现在,每个人都可以读/写数据库。我不担心写的部分,因为电子邮件认证。提前感谢! 我的数据库是这样设置的:数据库
如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子
我是新的Firebase.我已经建立了一个Firebase实时数据库,如果读写规则设置为true,可以读写它。 我的身份验证有问题。我已经为谷歌和电子邮件加密码设置了身份验证。 我的目标是允许任何用户读取数据,但只有一个用户(我自己)可以在使用单个电子邮件地址和密码登录后写入数据。 如果我用谷歌登录,我可以成功地读写数据库(规则设置为: auth!=null)。 如果使用电子邮件地址和密码登录,我
在本章中,我们将向您展示如何使用Firebase电子邮件/密码身份验证。 创建用户 要对用户进行身份验证,我们可以使用createUserWithEmailAndPassword(email, password)方法。 例子 (Example) 让我们考虑以下示例。 var email = "myemail@email.com"; var password = "mypassword"; fire
我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。
我可以在用户注册后发送一封验证邮件,但是用户会自动登录。在用户验证其电子邮件之前,我如何阻止他们登录?