我在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.