2017-03-14 2 views
0

Ich teste die Sicherheit meiner Daten auf Firebase. Ich habe eine ganze Weile in letzter Zeit auf der Dokumentation und ich dachte, dass ich es verstanden, aber wenn so etwas wie dies auf dem Simulator zu tun Ich bin mit meinem Kopf kratzt links:Warum wird diese Firebase-Datenbankregel als wahr gewertet, wenn dies nicht der Fall ist?

Firebase WTF

Die Regel lautet:

"propiedades": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    ".validate": "data.child('owner').val() === auth.token.sub" 
} 

und weder ist data.child('owner').val() in diesem speziellen Fall "s0kf6RvEzmfGGjVq9q14GQ6s14H32" nicht gleich "s0kf6RvEzmfGGjVq9q14GQ6s14H3" sein (es gibt eine „2“ trailing) soll noch auth.token ist === data.child('owner').val() sein, aber speziell auth.token.sub soll. Was zum Teufel geht hier vor?

Als Randbemerkung, geht die Operation durch, auch wenn die Strings gleich sind und auch wenn ich die Regel etwas wie folgt zu ändern:

"propiedades": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    "$id" : { 
     ".validate": "data.child('owner').val() === auth.token.sub" 
    } 
} 

Die schwere Bearbeitung kommt von der Tatsache, dass ich bin Tests mit allen möglichen Kombinationen und alles läuft gegen meine Logik. Ich bin zu diesem Zeitpunkt sehr verwirrt.

Dank

Antwort

1

Sie überprüfen, ob "propriedades/owner" === auth.token.sub aber wenn Sie Daten schreiben Sie an ein Kind "fgdfg" von "propriedades" gerade schreiben, die Ihr Besitzer Knoten bedeutet in "propriedades/fgdfg/owner" landen.

Sie waren auf dem richtigen Weg mit

"propiedades": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    "$id" : { 
     ".validate": "data.child('owner').val() === auth.token.sub" 
    } 
} 

außer Sie newData statt data verwendet werden soll. data bezieht sich auf die Daten, wie sie derzeit in der Datenbank existieren, da es dort (vermutlich) noch keine Daten gibt, die immer wahr zurückgeben. newData überprüft die Daten, wie sie waren, und die neuen Daten, also sollten Sie sie verwenden. Auch für mich scheint auth.token.sub nie zu funktionieren, also benutze ich stattdessen auth.uid, wenn auth.token für dich arbeitet, kannst du es behalten. Aber ich würde es durch auth.id ersetzen.

Dies sind die korrekten Regeln:

"propiedades": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    "$id" : { 
     ".validate": "newData.child('owner').val() === auth.uid" 
    } 
} 
+0

Die Validierung auch übergeben, wenn ich die „fgdfg“ Kinder nahmen auch aus. Ich habe auch an mehreren Stellen mit 'data' und' newData' getestet. Wie auch immer, das hat den Trick gemacht, danke – Chisko

Verwandte Themen