Ios Firebase规则:工作不一致

Ios Firebase规则:工作不一致,ios,swift,firebase,firebase-realtime-database,firebase-security,Ios,Swift,Firebase,Firebase Realtime Database,Firebase Security,我正在使用一种结构将用户朋友保存在实时数据库中,如下所示: friends $user_id: -$friend_id1 -name: "" -id: "" -$friend_id2 (...) "friends":{ "$id": { ".read": "auth != null && $id === auth.uid", ".write": fa

我正在使用一种结构将用户朋友保存在实时数据库中,如下所示:

friends
    $user_id:
        -$friend_id1
            -name: ""
            -id: ""
        -$friend_id2
(...)
"friends":{
     "$id": {
        ".read": "auth != null && $id === auth.uid",
        ".write": false,
      },
  },
我的规则是这样的:

friends
    $user_id:
        -$friend_id1
            -name: ""
            -id: ""
        -$friend_id2
(...)
"friends":{
     "$id": {
        ".read": "auth != null && $id === auth.uid",
        ".write": false,
      },
  },
在我的iOS应用程序中,我可以访问其他人的朋友,尽管我不应该这样做。 而且,这似乎主要是一个单一视图中的问题,因为当我更改

"read": false
我仍然可以在特定视图中读取这些数据。 但是,在所有其他视图中,我都不能这样做,尽管代码几乎相同(除了观察(
.childAdded
)而不是(
.value

我打电话来

let friends_ref = Database.database().reference().child("friends").child(self.friend_id)
    friends_ref.observeSingleEvent(of: .value, with: { (snapshot) in

    //CODE

})
此外,加载好友所需的时间(因此要获得回调)非常长,甚至需要>5秒才能获得5个好友

这怎么会发生


致以最诚挚的问候

我没有看到任何试图访问其他人朋友的代码。此外,当您更改规则时,数据可能仍在缓存中,因此它将首先从缓存中读取(缓存中没有规则,因为您已经获得了数据)。刚刚将self.user_id更改为self.friend_id。此字符串是当前用户的朋友的uid,因此我尝试访问他的朋友而不是我自己的朋友。关于缓存数据:我多次重建应用程序等,并且它开始重新加载它们,时间超过5秒。您的规则似乎正确,因此我不知道问题可能是什么。m可能它仍然使用一些旧的规则?新实施的规则可能需要一段时间才能生效。我也这么认为。但是,这些规则会立即对系统产生影响它正在为我自己的朋友在另一个视图中同时运行。因此我立即出现了一个错误。非常奇怪……你知道除了安全规则问题之外,为什么要花这么长时间加载吗?很可能正如Andre所说,无法读取的数据来自缓存。卸载并重新安装应用程序(不仅仅是重建它)以确保缓存已清除。