即使更改了数据库规则以允许所有读取和写入,也无法从Firestore中获取数据

时间:2019-12-11 07:12:40

标签: android firebase google-cloud-firestore

我在做什么

因此,我将两个应用程序连接到同一个数据库,一个正在使用实时数据库,并且使用云功能成功地将一些数据从实时数据库迁移到了云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规则的屏幕截图

enter image description here

科林代码

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:缺少权限或权限不足。

有人可以帮我吗, 我会非常感谢你

1 个答案:

答案 0 :(得分:0)

进入数据库->规则->

 allow read, write: if false; to true;

但是请注意,这意味着Firestore数据库根本没有安全性