我在做什么
因此,我把我的两个应用程序连接到同一个数据库,一个是使用实时数据库,然后我使用云函数成功地将一些数据从实时数据库迁移到云防火墙,另一个应用程序是使用云防火墙。
firebase auth对这两个应用程序都很好,第一个应用程序成功地从实时数据库中获取数据。
我的问题是
但问题是,第二个应用程序无法从云防火墙获取数据,所以我成功地捕捉到了异常,它说:"com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED:缺少或不足的权限。“
我为解决所做的一切
因此,从例外情况下,我能够发现这是一个权限问题,所以我更改了云防火墙的规则
早期的防火墙规则
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
修改了火基规则
所以我一个接一个地尝试了以下两条规则来解决这个问题。
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;
}
}
}
但不幸的是,上述任何一项都无法解决这个问题,即使在发布了新规则之后,我仍然得到了同样的例外。
更新
当前防火墙规则的屏幕截图
Kotlin代码
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:缺少或权限不足。
谁能帮帮我,我真的很感激你
发布于 2019-12-11 07:30:08
进入数据库->规则->
allow read, write: if false; to true;
但请注意,这意味着您的防火墙数据库根本没有安全性。
https://stackoverflow.com/questions/59280522
复制相似问题