2016-03-06 12 views
10

Próbowałem zrozumieć, ale nie byłem w stanie zobaczyć, jak i gdzie mogą znajdować się dane przechowywane po zalogowaniu.Firebase - Jak zapisywać/czytać dane na użytkownika po uwierzytelnieniu

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) { 
    } 
} 

W tym momencie pomyślnie uwierzytelniłem i wylądowałem na MainActivity. Następnie w onCreate z . Zainicjować 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 
} 

znajduje się przycisk dodać, że użyłem do pchania nowe rekordy od Androida do 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); 
    } 
}); 

Ale powyższy kod nie dodaje żadnego rekordu (wynika z ListView że nie jest aktualizowany) lub przynajmniej nie może wiedzieć, gdzie szukać danych. Sprawdziłem otwarcie przeglądarki Firebase, ale nie wiem, jak sprawdzić dane specyficzne dla użytkownika?

zmodyfikowałem mój Firebase Rules jak

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

Próbowałem otworzyć URL, takich jak https://xyz.firebaseio.com/xxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx ale nie wykazują żadnych danych.

Chciałbym mieć jakieś informacje na temat:

  1. Jak dodać danych konkretnego użytkownika po uwierzytelnieniu. Czy nie może być bezproblemowy, jak wtedy, gdy nie mamy żadnych ograniczeń dotyczących odczytu/zapisu na podstawie użytkownika, ponieważ mógłbym łatwo odczytać/zapisać dane.

  2. Czy istnieje widok sieciowy Firebase w celu wizualizacji bazy danych lub zobacz dane JSON, gdzie mogę zobaczyć/zmodyfikować dane do/z urządzenia z systemem Android?

+0

Tradycyjnie w węźle FireBase byłby węzeł/użytkownicy, w którym przechowywano dane użytkownika. Jeśli jest to nowy użytkownik, dodajesz jego identyfikator użytkownika do węzła użytkownika jako klucz, a dzieci będą parami klucz: wartość danych, które miałeś przechowywać; name: lokalizacja "bob": "florida" itd. Jeśli użytkownik uwierzytelnia się i istnieje, poznasz swój identyfikator uid, aby móc czytać w swoim węźle od/users.Dostęp do danych jest w Firebase, nazywany jest Firebase Dashboard i można uzyskać do nich dostęp po zalogowaniu się na konto w witrynie Firebase. – Jay

+1

Miałem to samo pytanie i rozwiązałem je tutaj: http://stackoverflow.com/questions/35820836/how-to-make-sure-a-user-can-only-see-and-access-their-own-data -in-firebase –

Odpowiedz

15

pierwsze, należy zmodyfikować zasady firstbase:

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

Następnie w kodzie 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"); 

w końcu dane będzie wyglądać mniej więcej tak :

Firebase Data

+0

Wielkie dzięki! Działa doskonale! – Mithun

+1

Wow, ten pojedynczy wpis SO w mniejszym lub większym stopniu wyjaśnił mi, jak działa Firebase, nie zdawał sobie sprawy, że to nie tyle tabela SQL, co hierarchia – Sirens