17

La méthode Firebase createUser() prend un champ e-mail et mot de passe, mais que se passe-t-il si je souhaite également autoriser l'utilisateur à utiliser un nom d'utilisateur personnalisé similaire à Snapchat, Instagram, StackOverflow, etc. Existe-t-il un moyen de modifier la méthode existante pour accepter ce champ ou dois-je faire pousser et gérer cette information manuellement et si oui, comment?Comment inclure un nom d'utilisateur lors du stockage d'un e-mail et d'un mot de passe à l'aide de Firebase (BaaS) dans une application Android?

Ceci est ma première tentative de stockage de l'information d'utilisateur souhaité:

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? Je pensais stocker l'UID avec le nom d'utilisateur peut m'aider dans le traitement des changements, etc. Aussi, 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édias sociaux?

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

Répondre

12

Afficher un formulaire avec trois champs:

  1. Nom d'utilisateur
  2. Adresse e-mail
  3. Mot de passe

Envoyer les deux derniers àde Firebaseméthode. Ensuite, dans le rappel de fin 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 storing user data dans les docs Firebase pour plus d'informations.

+1

Désolé pour la réponse tardive. Cela semble être pour Javascript. J'ai besoin de Java pour Android. Il semble être configuré légèrement différemment pour chacun et j'ai de la difficulté à traduire. – YoungCoconutCode

+0

Bien sûr. ** Modifier ** votre question pour inclure le code de votre meilleur effort et je vais jeter un coup d'oeil. –

+1

Fera! J'apprécie vraiment votre volonté d'aider! Question rapide d'abord: le parent '' 'users''' et l'objet' '' authData.uid''' ... avez-vous écrit manuellement ceux-ci dans la base de données ou sont-ils créés automatiquement lors de l'utilisation de createUser? Ils n'apparaissent pas dans mon tableau de bord Firebase et j'ai déjà authentifié quelques pseudo-utilisateurs.Ces objets sont-ils cachés ou inaccessibles à des fins de confidentialité? – YoungCoconutCode

7

Oui, il existe un moyen de mettre à jour les informations utilisateur dans Firebase. Tout ce dont vous avez besoin - pour lire cet article dans les documents Firebase et implémenter 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. Définissez simplement le nom d'utilisateur pour la propriété displayName et validez vos modifications.

J'espère que cela va vous aider.

+0

Même si l'autre réponse est en quelque sorte valide, c'est la vraie réponse à la question. – Jostein

0

Voici une façon de stocker les données enregistrées 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 mise en œuvre et l'exécution ... Merci

espoir que savez-vous sur la façon de modifier table (créer) avec nécessaire champs dans Firebase.

Related question & discussion with solutions