2013-07-12 18 views
31

Esiste un modo per autenticarsi con Firebase come amministratore di un firebase per l'accesso completo in lettura/scrittura (ha già regole di sicurezza che ne proteggono parti) o dovrò scrivere una regola di sicurezza che in qualche modo mi consente di accedere all'intera firebase, ad esempio fornendo una determinata password/chiave.Firebase autentica come amministratore

Esiste un modo standard o suggerito per farlo?

risposta

1

See this for the 'latest' documentation.

authWithCustomToken è ora signInWithCustomToken (versione 3.x Firebase)

Esempio dalla documentazione:

firebase.auth().signInWithCustomToken(token).catch(function(error) { 
    // Handle Errors here. 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    if (errorCode === 'auth/invalid-custom-token') { 
     alert('The token you provided is not valid.'); 
    } else { 
     console.error(error); 
    } 
}); 
+0

Ciao, vedo che questa è l'autenticazione regolare per connettersi a firebase (java, ios js ecc.). Come posso farlo in Python (voglio dire come posso accedere come amministratore). Come posso assicurarmi che chiunque stia usando il mio programma di amministrazione è davvero un amministratore? – Tomer

17

Sì, c'è. Devi semplicemente autenticarti usando un Firebase Secret invece di un token di autenticazione. vale a dire.

firebaseRef.auth(MY_SECRET); 

È possibile trovare il segreto nella sezione Autenticazione di Forge.

+8

'autenticazione()' è ora depricated. Consultare la risposta di Matt http://stackoverflow.com/a/27413337/978501 – Sridhar

+1

Ho usato ref.authWithCustomToken(), ma il payload che viene restituito ha proprietà null: auth, expires, token, uid. Tranne la proprietà 'provider' che è impostata su 'personalizzata'. Qual è la ragione per questo? – nodebase

+0

La risposta @nodebase (authData) è 'Object {auth: null, expires: null, token:" ", uid: null, provider:" custom "}' ma funziona contro la regola '" .read ":" auth.admin == true "' –

46

La risposta di Andrew funzionerà solo se si esegue l'autenticazione al di fuori del proprio codice lato client (altrimenti non si dovrebbe usare lo MY_SECRET ovviamente). Dal momento che molte persone, come me, usano Firebase per evitare il codice del server, ecco una risposta alternativa.

Nella maggior parte delle app di Firebase è probabile che sia presente un oggetto "Utenti" oltre al semplice oggetto "auth" di accesso (che memorizza solo e-mail e password). È possibile aggiungere un "isAdmin" o "isModerator" (o qualsiasi altra cosa si desideri) a ciascun utente $ nell'oggetto "Users".

E poi le regole sarebbero simile a questa (supponendo che l'auth.id corrisponde la chiave utente $):

{ 
    "rules": { 
    "someObject": { 
     ".write": "root.child('Users').child(auth.uid).child('isAdmin').val() == true" 
    } 
    } 
} 
+1

Ho appena iniziato con Firebase e mi piace molto il tuo suggerimento, ma non dovrebbe essere 'child (auth.uid)'? Solo curioso .. come ho detto, ancora imparando :) –

+0

Sì @BenjaminSolum hai ragione, auth.uid è il nuovo auth.id. Firebase ha rimosso completamente auth.id che era solo univoco per il provider e lo ha sostituito con un ID univoco globale. L'ho aggiornato nella risposta, speriamo che funzioni nel suo complesso. – Kyle

+0

Qualche consiglio su quale operatore di uguaglianza usare, ad esempio '.val() == true' o' .val() === true'? –

15

As per the documentation, è necessario utilizzare firebaseRef.authWithCustomToken.

Esempio;

firebaseRef.authWithCustomToken(FIREBASE_SECRET, function(error, authData) { 
    if(!error) { 
    // You are authenticated 
    } 
}); 

firebaseRef.auth ora è deprecato, utilizzare firebaseRef.authWithCustomToken invece.

+0

risposta è (authData) 'Object {auth: null, expires: null, token : "", uid: null, provider: "custom"} 'ma funziona contro la regola' ".read": "auth.admin == true" ' –

Problemi correlati