Ich habe zwei Benutzer in meiner Firebase-Konsole erstellt, beide haben einen anderen Benutzernamen und eine andere E-Mail-Adresse.Swift + Firebase-Sicherheit funktioniert nicht
Ich möchte sie in der Lage sein, ihre Partitur online in der Datenbank zu speichern. Das ist die Struktur:
AppName
- GameStats
- DBW9WQEs2sQn9CuPTE9t7Q1qWSz2
- Score : 0986
- Li75C2BYW7bQnKqMmrqLAZ67HUy4
- Score : 44131
Um diesen Wert zugreifen und halten es synchronisiert Ich benutze diese:
let baseRef = FIRDatabase.database().reference(withPath: "GameStats/" + user.uid + "")
let scoreRef = scoreRef.child("Score")
scoreRef.observe(.value, with: { snapshot in
print(snapshot.value)
})
Ich wollte, ob die beiden Benutzer testen, andere Informationen von einem anderen Benutzer zugreifen können. Ich habe die Linie, die die anderen user.uid
wie aufzunehmen so:
let baseRef = FIRDatabase.database().reference(withPath: "GameStats/Li75C2BYW7bQnKqMmrqLAZ67HUy4")
// Logged in User: DBW9WQEs2sQn9CuPTE9t7Q1qWSz2
und aus irgendeinem Grund gibt er dies:
Optional(44131)
Wenn ich den Wert in der Datenbank ändern, wird es automatisch aktualisiert den Wert auf die einen, den ich stelle.
Dies ist der falsche Benutzer und kann aus irgendeinem Grund darauf zugreifen.
Das sind meine Regeln:
{
"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'"
}
}
}
}
Warum ist die App so dass ein Benutzer einer anderen Benutzer, Daten lesen und wie ich den Zugriff beschränken, so dass der Benutzer nur die Daten unter der Benutzer-ID zugreifen kann?
Wie @M_G vorgeschlagen, nahm ich die .write
von der Eltern und die .read
. So sind meine Regeln jetzt:
{
"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'"
}
}
}
}
ich jetzt diese Ausgabe erhalten:
[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.
Haben Sie versucht, die allgemeine '.write'-Regel zu entfernen? –
@M_G meinst du: ".write": "auth! = Null"? Ich denke, diese Regeln beziehen sich nur auf die Eltern. Daher die Spezifikation der Kind Regeln – JamesG
Ich würde es versuchen, da die GameStats Write-Regel scheint richtig zu sein. –