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",
"GameStats": {
"$user_id": {
".write": "auth != null && auth.uid === $user_id && auth.provider === 'password'",
".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"
链接地址: http://www.djcxy.com/p/36479.html
上一篇: Swift + Firebase Security not working
下一篇: How to Set Default Gateway,Ip Address and Subnet mask from Java?