web-dev-qa-db-fra.com

Comment inclure un nom d'utilisateur lorsque vous stockez un email et un mot de passe en utilisant Firebase (BaaS) dans une application Android?

La méthode Firebase createUser() utilise un champ de courrier électronique et un mot de passe, mais que se passe-t-il si je souhaite également autoriser un nom d'utilisateur personnalisé, tel que Snapchat, Instagram, StackOverflow, etc.? Existe-t-il un moyen de modifier la méthode existante pour accepter également ce champ ou dois-je exécuter Push et gérer ces informations manuellement et, le cas échéant, comment? 

Ceci est ma première tentative de stockage des informations utilisateur souhaitées:

Firebase ref = new Firebase(firebaseURL);
ref.createUser(email, password, new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
System.out.println("Successfully created user account with uid: " + result.get("uid"));

//Sign user in
Firebase ref = new Firebase(firebaseURL);
ref.authWithPassword(email, password, new Firebase.AuthResultHandler() {

@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());

//Save user info
Firebase userRef = new Firebase(firebaseURL + "Users/");
User user = new User(username, authData.getUid());
userRef.setValue(user);

Est-ce une bonne pratique? J'ai pensé que le stockage de l'UID avec le nom d'utilisateur pourrait m'aider à gérer les modifications, etc. En outre, devrais-je implémenter la méthode updateChildren() ou Push() afin que les entrées ne soient pas écrasées s'il s'agit d'une application de média social? 

C'est ma deuxième tentative:

  @Override
  public void onAuthenticated(AuthData authData) {
  System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());

  //Save user info and username
  Firebase ref = new Firebase(firebaseURL);
  Map<String, String> map = new HashMap<String, String>();
  map.put("email", email);
  map.put("username", username);
  map.put("provider", authData.getProvider());

  ref.child("users").child(authData.getUid()).setValue(map);
21
YoungCoconutCode

Montrer un formulaire avec trois champs:

  1. Username
  2. Adresse électronique
  3. Mot de passe

Envoyez les deux derniers à la méthode createUser() de Firebase. Ensuite, dans le rappel d'achèvement pour cela, stockez toutes les informations dans votre base de données Firebase.

var userName, emailAddress, password;

// TODO: read these values from a form where the user entered them

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser({
  email    : emailAddress,
  password : password
}, function(error, authData) {
  if (error) {
    console.log("Error creating user:", error);
  } else {
    // save the user's profile into the database so we can list users,
    // use them in Security and Firebase Rules, and show profiles
    ref.child("users").child(authData.uid).set({
      provider: authData.provider,
      name: userName
    });
  }
});

Voir cette page sur stocker les données utilisateur dans les documents Firebase pour plus d'informations.

14
Frank van Puffelen

Oui, il existe un moyen de mettre à jour les informations utilisateur dans Firebase . Tout ce dont vous avez besoin - pour lire cet article dans la documentation Firebase et mettre en œuvre la méthode décrite ici Update user info

En utilisant cette méthode, vous pouvez mettre à jour la propriété diplayName de l’objet FirabaseUser. Il suffit de définir le nom d'utilisateur pour la propriété displayName et de valider vos modifications.

J'espère que cela t'aidera.

9
ostap_holub

Voici un moyen de stocker les détails enregistrés dans la base de données,

Map<String, String> parameters = new HashMap<>();
FirebaseDatabase mFirebaseInstance;
parameters.put(Constant.TAG_USER, strUsrS.trim());
parameters.put(Constant.TAG_EMAIL, strEmailS.trim());
parameters.put(Constant.TAG_PASS, strPassS.trim());
//use this if needed(pushId)
String pushId = mFirebaseInstance.getReference(YOUR TABLE NAME).getRef().Push().getKey();
parameters.put(Constant.TAG_KEY, pushId.trim());

mFirebaseInstance.getReference(YOUR TABLE NAME).getRef().child(strUsrS.trim()).setValue(parameters);

Essayez cette implémentation et exécutez ... Merci

J'espère que vous savez comment modifier (créer) une table avec les champs obligatoires dans firebase.

Question connexe et discussion avec des solutions

0
Arnold Brown