web-dev-qa-db-fra.com

Firebase - Comment écrire / lire des données par utilisateur après l'authentification

J'ai essayé de comprendre mais je n'ai pas pu voir comment et où pourraient être les données que je stocke après la connexion.

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

À ce stade, je suis authentifié avec succès et j'ai atterri sur MainActivity. Suivant dans onCreate de MainActivity. J'initialise 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
}

Il y a un bouton d'ajout que j'ai utilisé pour pousser de nouveaux enregistrements de Android vers 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);
    }
});

Mais le code ci-dessus n'ajoute aucun enregistrement (évident de ListView qui n'est pas mis à jour) ou du moins je ne sais pas où chercher les données. J'ai vérifié l'ouverture Firebase dans le navigateur, mais je ne sais pas comment vérifier les données spécifiques à l'utilisateur?

J'ai modifié mon Firebase Rules comme

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

J'ai essayé d'ouvrir des URL telles que https://xyz.firebaseio.com/xxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx mais cela n'affichait aucune donnée.

J'aimerais avoir des informations sur:

  1. Comment ajouter des données spécifiques à l'utilisateur après l'authentification. Cela ne peut-il pas être transparent comme lorsque nous n'avons aucune restriction en lecture/écriture sur la base de l'utilisateur, car je pourrais facilement lire/écrire des données.

  2. Existe-t-il une Firebase vue Web pour visualiser la base de données ou voir les données JSON, où je peux voir/modifier les données vers/depuis Android appareil?

12
Mithun

Tout d'abord, modifiez les règles Firebase comme suit:

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

Ensuite, dans Java Code:

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");

Au final, les données ressembleraient à ceci:

Firebase Data

15
Xi Wei

Pour la fin Web

Code Javascript:

var user = firebase.auth().currentUser;

if (user != null) {
   uid = user.uid;
   firebase.database().ref('/users/'+uid).Push({
      foo: 'abc',
      bar: 'pqr'
   });
}

Lisez https://firebase.google.com/docs/auth/web/manage-users#get_the_currently_signed-in_user pour plus d'informations.

3
shriyog