2017-02-03 5 views
1

Ich habe meine App mit Lesen und Schreiben mit weit geöffneten Berechtigungen arbeiten lassen und jetzt schließe ich sie ab. Meine App liest und schreibt jedoch nicht. Ich erhalte die Berechtigung verweigert, obwohl der Simulator der Firebase-Regeln besagt, dass meine Regeln für einen authentifizierten Facebook-Benutzer, dessen UID ich von einem erfolgreichen Firebase signInWithProvider erhalten habe, in Ordnung sind. Was vermisse ich?Erlangung der Berechtigung zum Lesen und Schreiben verweigert

{ 
    "rules": { 
    "items": { 
     "$uid": { 
     // user must match the authenticated user 
     ".read": "auth.uid == $uid", 
     ".write": "auth.uid == $uid" 
     } 
    } 
    } 
} 

Dies ist meine Datenstruktur:

my-firebase-app 
    -items: { 
     -<uid123> : [ 
      {label:'apple'}, 
      {label:'banana'} 
     ] 
     -<uid456> : [ 
      {label:'pear'}, 
      {label:'cherry'} 
     ] 
    } 
  • bis ich mich abmelde in Feuerbasis nach Facebook-Auth, indem Sie, firestack.auth.signInWithProvider(provider, facebookAccessToken, ''), die mir Objekt einschließlich uid
  • mein Benutzer gibt
  • ich /items/uid123 schieben und Holen Sie sich eine Artikel-ID, 333
  • Ich habe den Artikel {label:'apple'} für die neue ID (333) unter /items/uid123/333
  • abonniere ich die Sammlung von Gegenständen bei /items/uid123 durch die mit dem Web-sdk tun: itemsRef.child(uid).on('value', (snapshot) => .....

Mein Satz Anruf aussieht,

const newPostRef = itemsRef.child(uid).push(); newPostRef.set(itemWithID)

set Versprechen mit Erlaubnis verweigert werden abgelehnt Error.

All die Dinge, über Arbeit in Ordnung, wenn meine .read und .write sind einfach zu true gesetzt, was führt mich meine Syntax oder Struktur zu denken, gerade weg def in den Regeln ist. Würde etwas Input lieben.

+0

Bitte teilen Sie den minimalen Code, der das Problem auslöst. –

+0

Vielen Dank @FrankvanPuffelen, ich habe meine Frage mit mehr Details aktualisiert –

+0

Ich verstehe immer noch nicht, welcher Code das Problem auslöst. Ist es das 'on()', das die 'Berechtigung verweigert' auslöst? Beachten Sie auch, dass wir nicht sehen können, wie die Authentifizierung hier abläuft. Statt einer Aufzählungsliste, wie Sie glauben, dass sie ausgeführt wird, teilen Sie ein [einzelnes Snippet, das (wenn es ausgeführt wird) den Fehler auslöst] (http://stackoverflow.com/help/mcve). Es kann hilfreich sein, wenn Sie versuchen, das Problem in einem jsbin zu reproduzieren (obwohl das bedeuten würde, ohne Feuerschein zu reproduzieren). –

Antwort

1

Es ist nichts falsch mit den Sicherheitsregeln, und in der Theorie sehen sowohl die Set- als auch die Abfrageoperationen gut aus.

In der Praxis machen Sie jedoch einen schwerwiegenden Fehler. Wie Sie in den Kommentaren gezeigt haben, versuchen Sie, gleichzeitig das Web SDK und die Reactive-Native-Firestack-Bibliothek zu verwenden!

Der Authentifizierungsstatus wird nicht zwischen den beiden geteilt, daher ist die on('value') Abfrage vollständig nicht authentifiziert. Wenn Sie den dritten Parameter zu on hinzufügen (den Rückruf abbrechen), würden Sie den Fehler der Berechtigung verweigert sehen.

Sie müssen das Web SDK vollständig entfernen und die Echtzeit-Datenbank auch über Firestack verwenden.

+0

Das war es, es funktioniert jetzt alles, dass ich jede Firebase-Aktion auf Firestack migriert habe. Vielen Dank! –

Verwandte Themen