我目前正在尝试通过检查上一篇文章的时间戳来实现速率限制,然后向其添加+ 60秒,然后检查它是否小于(<)当前的Firebase服务器时间戳(现在)。
它不知何故总是返回true并授予访问权限?!
这些是我的规则:
{
"rules": {
"posts": {
".read": true,
".write":
"(root.child('users').child(auth.uid).child('lastPost').val() + 60) < now"
}
}
}
这是我的数据库结构
{
"posts": {
"-KV70ppGGTEtXY4_Q4UC": {
"author": "abcdedef-uid-ojifgoöifjgssgd",
"description": "Thats the post description",
"title": "Thats the post title"
}
},
"users": {
"2uy7323nTodMHcVxeEDJzoexH302": {
"canPost": true,
"email": "cryptic.pug@firebase.com",
"lastPost": 14776667681,
"profile_picture": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg",
"username": "Cryptic Pug"
}
}
}
答案 0 :(得分:2)
感谢你的线索弗拉基米尔!
由于我没有找到这种任何软件,我想在此正式分享答案:
{
"rules": {
"posts": {
".read": true,
".write":
"(root.child('users').child(auth.uid).child('lastPost').val() + 60000) < now"
}
}
}
说明:
当用户发布内容时,您始终会使用值firebase.database.ServerValue.TIMESTAMP
将数据库中的值更新为用户信息。
在规则语言中,您读取了想要发布(FB规则语言中为auth.uid
)并添加60秒(* 1000,因为Firebase在其时间戳中使用毫秒)的最后一个帖子的时间戳,将是允许用户再次发布的时间。然后检查当前服务器时间戳是否高于(<),而不是允许用户再次发布的时间。
希望它帮助了你们,Happy Coding - 做了3天的Firebase,这太棒了!