Autorizzazione Firebase negata

Sono relativamente nuovo nella programmazione e sto avendo problemi.

Ho questo codice per inviare dati a Firebase

app.userid = app.user.uid var userRef = app.dataInfo.child(app.users); var useridRef = userRef.child(app.userid); useridRef.set({ locations: "", theme: "", colorScheme: "", food: "" }); 

Tuttavia, continuo a ricevere l’errore:

AVVISO DI INCENDIO: impostato su / users / (GoogleID) non riuscito: permission_denied 2016-05-23 22: 52: 42.707 firebase.js: 227 Uncaught (in promise) Errore: PERMISSION_DENIED: Autorizzazione negata (…)

Quando cerco di dare un’occhiata a questo articolo, parlo delle regole per Firebase, che sembra essere in una lingua che non ho ancora imparato (o mi sta solo prendendo in giro). Qualcuno può spiegare che cosa sta causando il problema? Ho pensato che stavo chiedendo di memorizzare l’e-mail e il nome visualizzato dall’utente e non ti è stato permesso di farlo, ma quando li ho eliminati ho avuto lo stesso problema. C’è un modo per evitare questo errore senza impostare le regole, o sono regole qualcosa che posso insegnare a me stesso come scrivere in un giorno, o sono appena uscita dalla mia lega?

Grazie per qualsiasi aiuto!

Per impostazione predefinita, il database in un progetto nella nuova Firebase Console è leggibile / scrivibile solo da utenti autenticati:

 { "rules": { ".read": "auth != null", ".write": "auth != null" } } 

Vedi il quickstart per le regole di sicurezza del database Firebase .

Dal momento che non stai firmando l’utente dal tuo codice, il database ti nega l’accesso ai dati. Per risolvere il problema, è necessario consentire l’accesso non autenticato al database o accedere all’utente prima di accedere al database.

Consentire l’accesso non autenticato al proprio database

La soluzione più semplice per il momento (finché il tutorial non viene aggiornato) è di andare nel pannello Database nella console per il progetto, selezionare la scheda Regole e sostituire i contenuti con queste regole:

 { "rules": { ".read": true, ".write": true } } 

Questo rende il tuo nuovo database leggibile e scrivibile da tutti. Assicurati di proteggere nuovamente il tuo database prima di andare in produzione, altrimenti qualcuno potrebbe iniziare a maltrattarlo.

Accedi all’utente prima di accedere al database

Per una soluzione (leggermente) più dispendiosa in termini di tempo, ma più sicura, chiamare uno dei metodi signIn... di Firebase Authentication per assicurarsi che l’utente sia signIn... prima di accedere al database. Il modo più semplice per farlo è l’ autenticazione anonima :

 firebase.auth().signInAnonymously().catch(function(error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // ... }); 

E poi collega i tuoi ascoltatori quando viene rilevato l’accesso

 firebase.auth().onAuthStateChanged(function(user) { if (user) { // User is signed in. var isAnonymous = user.isAnonymous; var uid = user.uid; var userRef = app.dataInfo.child(app.users); var useridRef = userRef.child(app.userid); useridRef.set({ locations: "", theme: "", colorScheme: "", food: "" }); } else { // User is signed out. // ... } // ... });