【问题标题】:How to link between Authenticated users and Database in Firebase?如何在经过身份验证的用户和 Firebase 中的数据库之间链接?
【发布时间】:2017-02-21 09:23:13
【问题描述】:

我的 Android 应用中有 Firebase 身份验证。我的问题是如何在经过身份验证的用户(出现在 Firebase 控制台的 Firebase::Auth 选项卡中)和数据库(Firebase::Database 选项卡)之间建立链接。

我需要通过Auth 中出现的User UID 将数据库中的数据与Auth 中的相关用户链接,并最终发送有关特定UID 的查询以获取Database 中的相关信息.

是否有自动/内置的东西可以做到这一点,或者每次我验证用户身份时我必须在Database 中为用户创建一个新条目,然后使用出现的 UID 值为其创建一个 ID 字段在Auth?

User Management docs 中,它只解释了如何将用户添加到Auth 选项卡并重置他们的密码。

【问题讨论】:

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


【解决方案1】:

身份验证后,使用 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2018-01-27
    • 2017-11-01
    • 2021-03-20
    相关资源
    最近更新 更多