2016-03-06 25 views
10

Ho cercato di capire ma non sono in grado di vedere come e dove potrebbero essere i dati che sto memorizzando dopo l'accesso.Firebase - Come scrivere/leggere i dati per utente dopo l'autenticazione

public static final String BASE_URL = "https://xyz.firebaseio.com"; 

Firebase ref = new Firebase(FirebaseUtils.BASE_URL); 
    ref.authWithPassword("[email protected]", "some_password", new Firebase.AuthResultHandler() { 

    @Override 
    public void onAuthenticated(AuthData authData) { 
     Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_SHORT).show(); 
     startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
    } 
    @Override 
    public void onAuthenticationError(FirebaseError firebaseError) { 
    } 
} 

A questo punto sono autenticati con successo ed è atterrato sul MainActivity. Avanti in onCreate di MainActivity. Inizializzo Firebase

firebase = new Firebase(FirebaseUtils.BASE_URL).child("box"); 

// adapter below is an ArrayAdapter feeding ListView 
firebase.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     if (dataSnapshot.getValue(Box.class) instanceof Box) 
      adapter.add(dataSnapshot.getValue(Box.class).getName()); 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     adapter.remove(dataSnapshot.getValue(Box.class).getName()); 
    } 

    // other callbacks 
} 

C'è un pulsante aggiuntivo che ho usato per spingere nuovi record da Android a Firebase.

final Button button = (Button) findViewById(R.id.addButton); 
button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     Box box = new Box("Box " + System.currentTimeMillis(), "Location " + System.currentTimeMillis()); 
     Firebase fbBox = firebase.child("" + System.currentTimeMillis()); 
     fbBox.setValue(box); 
    } 
}); 

Ma soprattutto il codice non aggiunge alcun record (evidente dal ListView che non viene aggiornato) o almeno potrei non sapere dove cercare per i dati. Ho controllato l'apertura di Firebase nel browser, ma non sono sicuro di come verificare i dati specifici dell'utente?

ho modificato il mio Firebase Rules come

{ 
    "rules": { 
     "users": { 
     "$uid": { 
      ".write": "auth != null && auth.uid == $uid", 
      ".read": "auth != null && auth.uid == $uid" 
     } 
     } 
    } 
} 

ho provato ad aprire URL come https://xyz.firebaseio.com/xxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx ma non avrebbe mostrato alcun dato.

Vorrei avere qualche informazione su:

  1. Come aggiungere dati specifici dell'utente dopo l'autenticazione. Non può essere trasparente come quando non abbiamo alcuna restrizione sulla lettura/scrittura per utente, perché potrei facilmente leggere/scrivere dati.

  2. C'è una vista web Firebase per visualizzare il database o vedere i dati JSON, dove posso vedere/modificare i dati da/per dispositivo Android?

+0

Tradizionalmente si avrebbe un nodo/utenti in firebase in cui verranno archiviati i dati dell'utente. Se si tratta di un nuovo utente, si aggiunge il proprio uid al nodo degli utenti come chiave e i figli sarebbero la chiave: coppie di valori dei dati che si desidera memorizzare; nome: posizione "bob": "florida" ecc. Se l'utente si autentica ed esiste, conoscerai il loro uid in modo che tu possa leggere nel loro nodo da/utenti.C'è una vista web Firebase per i tuoi dati, si chiama Firebase Dashboard ed è accessibile solo dopo aver effettuato l'accesso al tuo account sul sito web di Firebase. – Jay

+1

Ho avuto la stessa domanda e l'ho risolto qui: http://stackoverflow.com/questions/35820836/how-to-make-sure-a-user-can-only-see-and-access-theirowndata -in-firebase –

risposta

15

In primo luogo, modificare le regole firstbase:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".write": "$uid === auth.uid", 
     ".read": "$uid === auth.uid" 
     } 
    } 
    } 
} 

Poi, nel codice Java:

Firebase rootRef = new Firebase("https://user-account.firebaseio.com/"); 
// Assuming the user is already logged in. 
Firebase userRef = rootRef.child("users/" + rootRef.getAuth().getUid()); 
userRef.child("message1").setValue("Hello World"); 

Alla fine, i dati sarebbero simile a questa :

Firebase Data

+0

Grazie mille! Funziona perfettamente! – Mithun

+1

Wow questo singolo post SO mi ha più o meno spiegato come funziona Firebase, non ho capito che non è tanto una tabella SQL ma una gerarchia – Sirens

Problemi correlati