正在发生的事情是,通常是第一次在经过足够的时间后对用户进行身份验证时,会话已过期,我拒绝了用户应该访问的数据请求。请求将最终开始工作,没有实际的规则或代码更改。这可能需要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)"
}
}
}
}
答案 0 :(得分:0)
默认情况下,您的身份验证令牌会在24小时内生效,因此如果您在此之前看到安全错误,则可能与您的会话无关。要验证这一点,您可以附加一个回调来告诉您会话何时到期。看到: https://www.firebase.com/docs/javascript/firebase/auth.html
我怀疑这里发生的事情只是你的规则所依赖的数据正在改变并导致写入成功一些,并使其他人失败。这是Firebase中安全规则的预期行为。例如,如果在/ todos / blah / members /中添加/删除某人,则会影响您阅读/ todos / blah的能力
你的规则有一个奇怪的地方是,你似乎允许任何人写入/ todos / $ list,只要他们正在编写的数据包含一个包含作者用户ID的成员列表。我怀疑这不是你想要的行为。也许您打算让写入规则依赖于Firebase中已有的数据而不是新数据?