1

Als ich aus der App anmelden, bekomme ich diesen Fehler:AngularJS Feuerbasis onAuthStateChanged signout der Datenbank Fehler

Error: permission_denied at /users/KuehJHDJ15SfS1s6FIh1: Client doesn't have permission to access the desired data. 

at G (firebase.js:432) 
    at Object.G (firebase.js:456) 
    at Pg (firebase.js:398) 
    at Eg.g.wd (firebase.js:391) 
    at sg.wd (firebase.js:381) 
    at bg.hg (firebase.js:379) 
    at eg (firebase.js:363) 
    at WebSocket.La.onmessage (firebase.js:362) 

Ich vermute, dass meine Frage ist sehr viel dazu hier bezogen werden: Refs not rerunning after onAuthStateChanged changes Firebase 3.0.0

hier sind meine Sicherheitsregeln:

{ 
    "rules": { 
    "users": { 
     ".read": "auth != null && root.child('hashlist/'+root.child('users/'+auth.uid+'/hash').val()).val() == auth.email", 
     ".write": "auth != null" 
    }, 
    "hashlist": { 
     ".read": true, 
     ".write": "auth != null && root.child('users/'+auth.uid+'/role').val() == 'admin'" 

    } 
    } 
} 

Ich würde mich über Ihre Hilfe freuen, danke.

+0

Ja. Es ist verwandt, aber es ist das Gegenteil: Sie müssen bei den Abhörreferenzen "aus" anrufen, bevor Sie sich abmelden. – cartant

+0

@cartant was soll ich genau machen? Kannst du ein Beispiel geben? – passion

+0

@cartant Wie finde ich meine Refs? weil ich mittlerweile 50 davon habe ... – passion

Antwort

3

Die Fehler werden ausgelöst, weil Refs weiterhin auf Änderungen warten, nachdem die Abmeldung erfolgt ist. Wenn sie abgemeldet sind, verhindern die Sicherheitsregeln dies.

Um die Fehler zu vermeiden, müssen Sie off bei allen Referenzen anrufen, die vor der Abmeldung zuhören.

Es gibt keine automatische Einrichtung dafür; es ist etwas, was Sie selbst verwalten müssen. Sie sollen:

  • Verwenden $scope.$on("$destroy", ...) auszuschalten Refs in Bereichen hören, wenn es nicht mehr benötigt werden (es ist eine lange Zeit her ist, seit ich Angular JS verwendet habe, so konnte mein Gedächtnis ein wenig unzuverlässig hier sein).
  • Stellen Sie sicher, dass Sie nicht hängende Listener mit Hilfe von once in Situationen lassen, in denen Sie nur einmal einen Wert lesen müssen.
  • Verwenden Sie AngularFire, die einige schöne Bindungen für Objekte und Arrays bietet und sich (wenn ich mich richtig erinnere) so verkabelt, dass die internen Refs bei der Zerstörung von Bereichen abgeschaltet werden.
Verwandte Themen