微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – Swift Firebase安全无法正常工作

我在Firebase控制台中创建了两个用户,两者都有不同的用户名和电子邮件地址.

我希望他们能够将他们的分数存储在数据库中.这是结构:

AppName
  - GameStats
    - DBW9WQEs2sQn9CuPTE9t7Q1qWSz2
      - score : 0986
    - Li75C2BYW7bQnKqMmrqLAZ67HUy4
      - score : 44131

要访问此值并保持同步,我使用此:

let baseRef = FIRDatabase.database().reference(withPath: "GameStats/" + user.uid + "")
let scoreRef = scoreRef.child("score")

scoreRef.observe(.value,with: { snapshot in
   print(snapshot.value)
})

我想测试这两个用户是否可以访问其他用户的其他信息.我更改了行以包含其他user.uid,如下所示:

let baseRef = FIRDatabase.database().reference(withPath: "GameStats/Li75C2BYW7bQnKqMmrqLAZ67HUy4")

// Logged in User: DBW9WQEs2sQn9CuPTE9t7Q1qWSz2

由于某种原因,它输出这个:

Optional(44131)

如果我更改数据库中的值,它会自动将值更新为我放置的值.

这是错误用户,由于某种原因,它可以访问它.

这些是我的规则:

{
  "rules": {
    ".read": "auth != null",".write": "auth != null","GameStats": {
         "$user_id": {
         ".write": "auth != null && auth.uid === $user_id && auth.provider === 'password'",".read": "auth != null && auth.uid === $user_id && auth.provider === 'password'"
      }
    }
  }
}

为什么应用程序允许一个用户读取另一个用户数据?如何限制访问权限以便用户只能访问其用户ID下的数据?

正如@M_G建议的那样,我从父母和.read中取出了.write.所以我的规则现在是:

{
  "rules": {
    // ".read": "auth != null",// ".write": "auth != null",".read": "auth != null && auth.uid === $user_id && auth.provider === 'password'"
       }
     }
  }
}

我现在得到这个输出

[FirebaseDatabase] setValue: or removeValue: at /GameStats/DBW9WQEs2sQn9CuPTE9t7Q1qWSz2 Failed: permission_denied - This is for the correct user too. I get this error if wrong user also.

解决方法

Firebase文档错误(暂时).在Firebase控制台中,打开规则模拟器.目前没有“密码”选项,我认为这是一个错误.

如果您没有使用多个身份验证或多个身份验证在您的项目中无关紧要,请不要在您的规则中使用提供程序.否则,您可以测试此规则以进行密码验证:

".write": "auth != null && auth.uid === $user_id && auth.token.firebase.identities.email !== null"

原文地址:https://www.jb51.cc/iOS/331332.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐