How to link between Authenticated users and Database in Firebase?
After authentication, create a child with the UID given by Firebase, and set its value to your user class:
//get firebase user
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//get reference
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(USERS_TABLE);
//build child
ref.child(user.getUid()).setValue(user_class);
USERS_TABLE is a direct child of root.
Then when you want to retrieve the data, get a reference to the user by its UID, listen for addListenerForSingleValueEvent()
(invoked only once), and iterate over the result with reflection:
//get firebase user
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//get reference
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(USERS_TABLE).child(user.getUid());
//IMPORTANT: .getReference(user.getUid()) will not work although user.getUid() is unique. You need a full path!
//grab info
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Profile tempProfile = new Profile(); //this is my user_class Class
final Field[] fields = tempProfile.getClass().getDeclaredFields();
for(Field field : fields){
Log.i(TAG, field.getName() + ": " + dataSnapshot.child(field.getName()).getValue());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
edit:
Or without reflection:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Profile p = dataSnapshot.getValue(Profile.class);
}
Alaa M.
Updated on July 09, 2022Comments
-
Alaa M. almost 2 years
I have Firebase Authentication in my Android app. My question is how do I link between authenticated users (that appear in
Firebase::Auth
tab in the Firebase console) and the database (Firebase::Database
tab).I need to link data in the database with the relevant user in
Auth
by theUser UID
that appears inAuth
, and eventually send queries about a specificUID
to get the relevant info inDatabase
.Is there something automatic / built-in that does that or do I have to create a new entry for a user in
Database
each time I authenticate a user and then create an ID field for it with the UID value that appears inAuth
?In the User Management docs it explains only about adding users to the
Auth
tab and resetting their passwords.