首页 > 解决方案 > 与键关联的 Firebase 实时数据库访问值

问题描述

我有几个问题。我试图通过 http.onReuest firebase 函数使用 firebase-admin sdk 验证密钥。

所以我在这里所做的是,管理员只需在 Web 客户端上输入用户的电子邮件 ID 即可向用户发送邀请链接。因此,当管理员发送邀请时,它会将电子邮件 ID 推送到 Firebase 数据库并捕获自动生成的密钥并将密钥附加到 URL 中并将 URL 发送给用户。当用户单击电子邮件中的链接时,它会向下面的函数发出 get 请求,该函数将 url 拆分并将 id 搜索到数据库中并相应地返回响应。

但是搜索与键关联的值不起作用。我尝试了不同的代码片段,但都没有工作。

A - /*邀请网址 格式 - https://web-url.com/invite/[teacher-unique-id]=[auto-gen-key-id ] * /

app.get('/invite/:token', (req, res) => {
    var result = req.params.token.split("=");
    const ref = database.ref('/teachers/' + result[0] + '/invited/');
    ref.once('value', (snap) => {
        snap.forEach((data) => {
            if (data.key === result[1]) res.send(data.val());
            else res.send("No user found... :(");
        });
    });
});


exports.fakeApp = functions.https.onRequest(app);

-

// verify invite link and add to database
app.get('/invite/:token', (req, res) => {
    var result = req.params.token.split("=");
    const ref = database.ref('/teachers/' + result[0] + '/invited/');
    ref.orderByKey().equalTo(result[1]).on("child_added" /* also tried "value" */, (snap)=>{
        res.send({
            status:"sucess",
            value: snap.val()
        });
    });
});

此外,我每 15 秒一直到达终点,有时它显示成功,但大多数时候它显示内部服务器错误或超时错误或错误:无法处理请求

编辑

    {
    "teachers":
    {
        "teacher-unique-id":
        {
            "invited":
            {
                "auto-gen-key-id": "student-email-id-1",
                "auto-gen-key-id": "student-email-id-2",
                "auto-gen-key-id": "student-email-id-3",
                "auto-gen-key-id": "student-email-id-4",
                "auto-gen-key-id": "student-email-id-5",
            },
            "accepted":
            {
                "auto-gen-key-id": "unique-student-id-1",
                "auto-gen-key-id": "unique-student-id-2",
                "auto-gen-key-id": "unique-student-id-3",
            }
        }
    },
    "students":
    {
        "unique-student-id-1":
        {
            "session-id-1":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            },
            "session-id-2":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            }
        },
        "unique-student-id-2":
        {
            "session-id-1":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            },
            "session-id-2":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            }
        }
    }
}

标签: node.jsfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


最后我自己修好了!---

// 验证邀请链接并添加到数据库

app.get('/invite/:token', (req, res) => {
    let result = req.params.token.split("=");
    let ref = database.ref('/teachers/' + result[0] + '/invited/');

    ref.child(result[1]).once('value').then(snap => {
        if (snap.val() != null) {
            res.send({
                msg: "Hurray! You exists",
                status: "Found",
                val: snap.val(), 
            });
        } else {
            res.send({
                msg: "Please Don't Hack me", 
                status: "Not Found"
            });
        }
    }).catch(err => {
        throw new functions.https.HttpsError('unknown', error.message, error);
    });

});

推荐阅读