【问题标题】:Firebase Realtime Database access value associated with a key与键关联的 Firebase 实时数据库访问值
【发布时间】:2020-04-28 23:08:51
【问题描述】:

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

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

但是搜索与键关联的值不起作用。我尝试了不同的代码 sn-ps 但没有工作。

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);

B -

// 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",
            }
        }
    }
}

【问题讨论】:

  • Stack Overflow 是一个非常低效的交互式调试器。此代码的哪个精确行不起作用?您可能还需要在此处向我们展示您尝试查询的 JSON(作为文本,请不要截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
  • 代码很好,到目前为止没有错误,但它没有按预期工作。抱歉,我无法在此处共享 JSON,因为它存储了用户的一些敏感数据,但我可以在此处共享结构。检查 JSON 结构的编辑。

标签: node.js firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

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

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

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

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2021-04-13
    • 2020-08-13
    • 2019-02-16
    • 2022-01-05
    相关资源
    最近更新 更多