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

时间:2016-10-12 14:13:09

标签: android firebase firebase-realtime-database firebase-authentication

我的Android应用中有Firebase身份验证。我的问题是如何在经过身份验证的用户(显示在Firebase控制台的Firebase::Auth标签中)与数据库(Firebase::Database标签)之间建立链接。

我需要通过Auth中显示的User UID将数据库中的数据与Auth中的相关用户相关联,并最终将有关特定UID的查询发送到获取Database中的相关信息。

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

User Management docs中,它仅解释了如何将用户添加到Auth标签并重置其密码。

1 个答案:

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