17

Il metodo Firebase createUser() accetta un campo email e password, ma cosa succede se voglio consentire all'utente un nome utente personalizzato simile a Snapchat, Instagram, StackOverflow ecc.? C'è un modo per modificare il metodo esistente per accettare quel campo o devo fare push e gestire queste informazioni manualmente e, in caso affermativo, come?Come si include un nome utente quando si archiviano email e password utilizzando Firebase (BaaS) in un'app Android?

Questo è il mio primo tentativo di memorizzare informazioni utente desiderato:

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

è questa buona pratica? Ho pensato che memorizzare l'UID con il nome utente potrebbe aiutarmi in futuro a gestire le modifiche, ecc. Inoltre, dovrei implementare il metodo updateChildren() o push() in modo che le voci non vengano sovrascritte se si tratta di un'app di social media?

Questo è il mio secondo tentativo:

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

risposta

12

Mostra un modulo con tre campi:

  1. Nome utente
  2. Indirizzo e-mail
  3. password

Invia le ultime due a FirebaseMetodo. Quindi, nel richiamo di completamento per quello, memorizza tutte le informazioni nel database di 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 
    }); 
    } 
}); 

Vai a questa pagina su storing user data nella documentazione Firebase per ulteriori informazioni.

+1

Siamo spiacenti per la risposta tardiva. Questo sembra essere per Javascript. Ho bisogno di Java per Android. Sembra essere configurato in modo leggermente diverso per ciascuno e ho problemi a tradurre. – YoungCoconutCode

+0

Sicuro. ** Modifica ** la tua domanda per includere il codice del tuo miglior sforzo e darò un'occhiata. –

+1

Farà! Apprezzo molto la tua disponibilità ad aiutare! Prima domanda rapida: il genitore '' 'users''' e l'oggetto' '' authData.uid'' ... ... dovevi scriverli manualmente nel database o sono quelli creati automaticamente quando usi createUser? Non vengono visualizzati nella dashboard di Firebase e ho già autenticato alcuni pseudo-utenti.Questi oggetti sono nascosti o inaccessibili ai fini della privacy dell'utente? – YoungCoconutCode

7

Sì, c'è un modo per aggiornare le informazioni utente in Firebase. Tutto ciò di cui hai bisogno: leggere questo articolo in Firebase e implementare il metodo descritto qui Update user info

Utilizzando questo metodo è possibile aggiornare la proprietà diplayName dell'oggetto FirabaseUser. Basta impostare il nome utente per la proprietà displayName e confermare le modifiche.

Spero che questo ti possa aiutare.

+0

Anche se l'altra risposta è valida, questa è la vera risposta alla domanda. – Jostein

0

Ecco un modo per memorizzare i dati registrati nel database,

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

Prova questa implementazione ed esecuzione ... Grazie

auguriamo che consapevoli di come modificare (creare) tabella con richiesta campi in firebase.

Related question & discussion with solutions

Problemi correlati