我在做什么
因此,我将两个应用程序连接到同一个数据库,一个正在使用实时数据库,并且使用云功能成功地将一些数据从实时数据库迁移到了云Firestore,另一个应用程序正在使用云Firestore。
firebase auth对于这两个应用程序均正常运行,第一个应用程序已成功从实时数据库中获取数据
我的问题是
但是问题是第二个应用程序无法从云Firestore中获取数据,因此我成功捕获到异常,并显示“ com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:缺少权限或权限不足。” >
我要解决的问题
因此,从异常情况中,我能够弄清楚这是一个权限问题,因此我更改了云存储区的规则
较早的Firestore规则
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
更改了Firebase规则
所以我一一尝试了以下两个规则来解决该问题
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
和
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
但不幸的是,以上方法均无法解决问题 即使发布了新规则,我仍然遇到同样的异常情况
更新
当前Firestore规则的屏幕截图
科林代码
class Toppers {
private val firestore:FirebaseFirestore by lazy{
FirebaseFirestore.getInstance()
}
private val toppersList = mutableListOf<Topper>()
private val toppers = MutableLiveData<List<Topper>>()
init {
toppers.value = toppersList
}
fun getToppers():LiveData<List<Topper>>
{
firestore.collection("Toppers").get().addOnCompleteListener { task ->
if(task.isSuccessful)
{
toppersList.clear()
for(topper in task.result!!)
{
Log.d("(Saquib)","data is fetched "+topper.get("name").toString())
toppersList.add(
Topper(topper.get("name").toString(),
topper.get("percentage").toString(),
topper.get("imgurl").toString(),
topper.get("resulturl").toString(),
topper.get("rollno").toString(),
topper.get("schoolname").toString(),
topper.get("session").toString(),
topper.get("stream").toString(),
topper.get("standard").toString())
)
}
}
else
{
Log.d("(Saquib)","unable to fetch the data "+task.exception?.cause.toString())
}
}.addOnCompleteListener {
toppers.value = toppersList
}
return toppers
}
}
Android日志
(Saquib):无法获取数据io.grpc.StatusException:PERMISSION_DENIED:缺少权限或权限不足。
有人可以帮我吗, 我会非常感谢你
答案 0 :(得分:0)
进入数据库->规则->
allow read, write: if false; to true;
但是请注意,这意味着Firestore数据库根本没有安全性