从 Firebase 实时数据库中检索名字,其中 UserId 与登录者的 uid 匹配

问题描述 投票:0回答:1

我尝试使用教程和视频来解决这个问题,但无法使其发挥作用。我的 Firebase 实时数据库有一个名为“用户”的表。用户表中有两个字段 - 用户 ID 和名字。

我想检索记录的firstName字段值,其中UserId =当前登录用户的uid。这是我的代码:

//monitoring authchanges 
onAuthStateChanged(auth, async (user) => {
    if (user) {
        const uid = user.uid;
        const firstname = await getFirstnameOfLoggedInUser();
        if (firstname) {
            welcomeTxt.textContent = "Welcome back, " + firstname + "!";
        } else {
            // Handle case where firstname retrieval fails (optional)
        }
    } else {
        console.log("user is logged out");
        welcomeTxt.textContent = "Welcome! Please sign in or create an account.";
    }
});

//get FirstName of person logged in
async function getFirstnameOfLoggedInUser() {
    const user = auth.currentUser;
    console.log(user);
    if (user) {
        const uid = user.uid;
        console.log(uid);
        const userRef = ref(database, "users/" + uid);
        console.log(userRef);
        get(userRef, (snapshot) => {
            const userdata = snapshot.val().firstName;

            console.log(userdata);
        });
    }
}

此代码正确记录当前 uid,但即使我看到 UserId 和 uid 匹配,也不会检索用户表中的正确记录。请帮忙!

javascript firebase-realtime-database
1个回答
0
投票

您需要使用查询根据 UID 获取具有正确名字的用户。比如:

const usersRef = ref(database, "users");
const userQuery = query(usersRef, orderByChild("UserId"), equalTo(uid));
get(userQuery, (snapshot) => {
    snapshot.forEach((userSnapshot) => {
        const userdata = userSnapshot.val().firstName;

        console.log(userdata);
     });
});

另请参阅有关排序和过滤数据的 Firebase 文档。

© www.soinside.com 2019 - 2024. All rights reserved.