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:
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.