0

当我尝试在我的数据库中恢复我的用户(代码 1)时,我因身份验证问题被困了三天,出现了一条错误消息(代码 2)。在我看来,我似乎在身份验证级别断开了连接。我还附上了我的请求代码(代码 3)以读取数据库中的“用户”文件,因为在我看来错误来自那里

代码 1:


1
rules_version = '2';
2
service cloud.firestore {
3
  match /databases/{database}/documents {
4
    match /users /{userId=**} {
5
      allow create
6
      allow read : if request.auth != null 
7
    }
8
    match /cities/{city=**}{
9
        allow write : if true
10
        allow read : if true
11
      }
12
  }
13
}

代码 2:

2021-03-06 14:25:18.395 18921-18921/com.croustibat.ampc93 W/com.croustibat.ampc93.CityFragmentPresentation: Echec de chargement des utilisateurs
    com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.
        at com.google.firebase.firestore.util.Util.exceptionFromStatus(Util.java:117)
        at com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166)
        at com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:589)
        at com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:425)
        at com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99)
        at com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562)
        at com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446)
        at com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53)
        at com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176)
        at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108)
        at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38)
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119)
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(Unknown Source:4)
        at com.google.firebase.firestore.remote.AbstractStream$CloseGuardedRunner.run(AbstractStream.java:67)
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110)
        at com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125)
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658)
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: io.grpc.StatusException: PERMISSION_DENIED: Missing or insufficient permissions.
        at io.grpc.Status.asException(Status.java:541)
        at com.google.firebase.firestore.util.Util.exceptionFromStatus(Util.java:115)
        at com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166) 
        at com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:589) 
        at com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:425) 
        at com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99) 
        at com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562) 
        at com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446) 
        at com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53) 
        at com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176) 
        at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108) 
        at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38) 
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119) 
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(Unknown Source:4) 
        at com.google.firebase.firestore.remote.AbstractStream$CloseGuardedRunner.run(AbstractStream.java:67) 
        at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110) 
        at com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125) 
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658) 
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643) 
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) 
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229) 
        at java.lang.Thread.run(Thread.java:923) 
2021-03-06 14:25:18.425 18921-18921/com.croustibat.ampc93 D/com.croustibat.ampc93.CityFragmentPresentation: Conversion réussie !!!

代码 3:

fun onDisplayDataFirestoreToUser() {
        db.collection("users").whereNotEqualTo("$currentUser", null)
            .get()
            .addOnSuccessListener {
                it.forEach {
                    val user = it.toObject<User>()
                    users.add(user)
                }
            }
            .addOnFailureListener {
                Log.w(TAG, "Echec de chargement des utilisateurs", it)
            }
    }

请帮帮我,我完全卡住了

4

1 回答 1

1

你的规则有点乱,这是一个在模拟器中工作的清理版本。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId=**} {
      allow create: if true;
      allow read: if request.auth != null;
    }
        
    match /cities/{city=**} {
      allow write: if true;
      allow read: if true;
    }
  }
}

我建议将您的规则更新到上述内容,然后使用“规则游乐场”对其进行测试。这至少可以排除您的安全规则存在的问题。

于 2021-03-06T13:48:40.487 回答