我在将我在firebase数据库中保存的时间间隔与现在的'比较时遇到了问题。 firebase安全规则。我写的规则旨在防止用户在一段时间后发帖。 这就是我在数据库中保存时间戳的方式:
"time": NSDate().timeIntervalSince1970
这是我写的安全性规则,如果在一段时间后会阻止读取:
"follower-feed": {
// ".read": "auth !== null",
".write": "auth !== null",
"$userID": {
"$postID": {
".read": "auth !== null && data.child('time').val() >= ((now / 1000) - 86400)",}}},
这是我用来存储帖子的数据库架构:
-follower-feed:{
user_uid_1:{
post_uid_1: {
"time": 1515435031.16646
post_uid_2: {
"time": 1515435091.22323
我想指出,我已经考虑到了现在'现在'以毫秒为单位并将其除以1,000应该将我的两个数字设置为秒的相同时间值。我已经扼杀了所有关于firebase文档的内容,但没有什么能帮我解决这个问题。当我运行模拟器测试以确定所请求的读取是否会通过时,它表示它将通过。但是,在我的应用程序中,没有数据被读取。
这是尝试从firebase读取数据的代码:
var followingPosts = [Post]()
func loadUserFeed(_ update: @escaping () -> Void) {
userFeedHandle = CURRENT_USER_FEED_REF.observe(DataEventType.value, with: {(snapshot) in
self.followingPosts.removeAll()
for child in snapshot.children.allObjects as! [DataSnapshot] {
let post = Post(postID: child.key, postData: child.value as! Dictionary<String, Any>)
self.followingPosts.append(post)
self.followingPosts.sort(by: { Double(truncating: $0.time) > Double(truncating: $1.time)})
update()
}
if snapshot.childrenCount == 0 {
update()
}
})
}
答案 0 :(得分:1)
CURRENT_USER_FEED_REF
似乎是包含给定用户帖子的位置,即follower-feed/$userID
,并且您希望帖子年龄的安全规则会起到过滤器的作用,允许用户最近的帖子到由查询和旧帖子返回以排除。但安全规则不是过滤器。对于任何位置,您可以读取所有数据(包括其子项),也可以不读取任何数据。您没有允许在follower-feed/$userID
读取的规则,因此该位置的查询将失败。
请参阅Firebase团队成员的this answer,了解如何实施所需内容,或搜索“firebase规则不是过滤器”以查看其他相关问题和答案。