1

发生的情况是,通常在经过足够长的时间(会话已过期)后我第一次对用户进行身份验证时,我对用户应该有权访问的数据的请求被拒绝。请求最终将开始工作,没有实际的规则或代码更改。它可能需要 2 到 10 分钟,但最终会自行恢复。

我没有这方面的硬数据;这只是我观察到的。

我不知道我能做些什么。还有人看到这个吗?这是一个已知的错误?我已经搜索过,但没有发现任何其他关于这种情况的说法。

谢谢。

以下是规则:

{
 "rules": {

    "users": {
      "$user": {
        ".read" :"$user == auth.id || data.child('email').val() == auth.email",
        ".write":"$user == auth.id"
      }
    },

    "todos":{
      "$list":{
        ".read":"data.child('members').hasChild(auth.id)",
        ".write":"newData.child('members').hasChild(auth.id)"
      }
    }
  }
}
4

1 回答 1

0

默认情况下,您的身份验证令牌有效期为 24 小时,因此如果您在此之前看到安全错误,则可能与您的会话无关。为了验证这一点,您可以附加一个回调来告诉您会话何时过期。请参阅: https ://www.firebase.com/docs/javascript/firebase/auth.html

我怀疑这里发生的事情仅仅是您的规则所依赖的数据正在发生变化并导致写入有时成功,而另一些则失败。这是 Firebase 中安全规则的预期行为。例如,如果某人从 /todos/blah/members/ 添加/删除,这将影响您在 /todos/blah 的阅读能力

关于您的规则的一件奇怪的事情是,您似乎允许任何人写入 /todos/$list,只要他们正在写入的数据包含包含作者用户 ID 的成员列表。我怀疑这不是您的预期行为。也许您的意思是让写入规则依赖于 Firebase 中已经存在的数据而不是新数据?

于 2013-03-22T19:13:12.747 回答