无法比较数据库时间戳到firebase'现在'安全规则

时间:2018-01-08 18:33:14

标签: swift firebase firebase-security

我在将我在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()
        }

    })

}

1 个答案:

答案 0 :(得分:1)

CURRENT_USER_FEED_REF似乎是包含给定用户帖子的位置,即follower-feed/$userID,并且您希望帖子年龄的安全规则会起到过滤器的作用,允许用户最近的帖子到由查询和旧帖子返回以排除。但安全规则不是过滤器。对于任何位置,您可以读取所有数据(包括其子项),也可以不读取任何数据。您没有允许在follower-feed/$userID读取的规则,因此该位置的查询将失败。

请参阅Firebase团队成员的this answer,了解如何实施所需内容,或搜索“firebase规则不是过滤器”以查看其他相关问题和答案。