我的Android应用中有Firebase身份验证。我的问题是如何在经过身份验证的用户(显示在Firebase控制台的Firebase::Auth
标签中)与数据库(Firebase::Database
标签)之间建立链接。
我需要通过Auth
中显示的User UID
将数据库中的数据与Auth
中的相关用户相关联,并最终将有关特定UID
的查询发送到获取Database
中的相关信息。
是否有自动/内置功能可以执行此操作,或者每次我对用户进行身份验证时都必须为Database
中的用户创建新条目,然后使用UID值为其创建ID字段出现在Auth
?
在User Management docs中,它仅解释了如何将用户添加到Auth
标签并重置其密码。
答案 0 :(得分:12)
验证后,使用Firebase提供的UID创建一个子项,并将其值设置为您的用户类:
//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是root的直接子女。
然后,当您想要检索数据时,通过其UID获取对用户的引用,侦听addListenerForSingleValueEvent()
(仅调用一次),并使用反射迭代结果:
//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) {
}
});
修改强>
或没有反思:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Profile p = dataSnapshot.getValue(Profile.class);
}