简体   繁体   中英

How do you include a username when storing email and password using Firebase (BaaS) in an Android app?

The Firebase createUser() method takes an email and password field, but what if I want to also allow the user a custom username similar to Snapchat, Instagram, StackOverflow etc? Is there any way to modify the existing method to accept that field as well or do I need to do push and manage this info manually and if so how?

This is my first attempt at storing the desired user info:

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

Is this good practice? I figured storing the UID with the username may help me in the future handling changes etc. Also, should I be implementing the updateChildren() or push() method so the entries do not get overwritten if this is a social media app?

This is my second attempt:

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

Show a form with three fields:

  1. Username
  2. Email address
  3. Password

Send the latter two to Firebase's createUser() method. Then in the completion callback for that, store all information in your Firebase database.

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

See this page on storing user data in the Firebase docs for more information.

Yes, there is a way how to update user info in Firebase. All you need - to read this article in Firebase docs and implement method described here Update user info

Using this method you can update diplayName property of FirabaseUser object. Just set user name for displayName property and commit your changes.

I hope this will help you.

Here is one way to store the registered details in 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);

Try this implementation and execute... Thankyou

Hope that you aware about how to alter(create) table with required fields in firebase.

Related question & discussion with solutions

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM