如何在Firebase中的Authenticated用户和数据库之间建立链接?

Ala*_* M. 13 android firebase firebase-authentication firebase-realtime-database

我的Android应用中有Firebase身份验证.我的问题是如何在经过身份验证的用户(显示在Firebase::AuthFirebase控制台的选项卡中)和数据库(Firebase::Database选项卡)之间进行链接.

我需要数据库中的数据与相关用户在链接AuthUser UID出现在Auth,并最终发送关于特定查询UID得到的相关信息Database.

是否有自动/内置功能可以执行此操作,或者Database每次我对用户进行身份验证时是否必须为用户创建新条目,然后使用显示的UID值为其创建ID字段Auth

用户管理文档中,它仅解释了如何将用户添加到Auth选项卡并重置其密码.

Ala*_* M. 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);
Run Code Online (Sandbox Code Playgroud)

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) {
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

或者没有反思:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    final Profile p = dataSnapshot.getValue(Profile.class);
}
Run Code Online (Sandbox Code Playgroud)