node.js - 与键关联的 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",
}
}
}
}
解决方案
最后我自己修好了!---
// 验证邀请链接并添加到数据库
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);
});
});
推荐阅读
- python - Ctrl + C 没有停止程序
- php - 503 错误但脚本继续运行 - 我如何查看结果?
- linux - Linux 中套接字发送缓冲区的最大有效大小是多少?
- asp.net-mvc - 使用 ImageSharp 调整大小后尝试通过 MVC 控制器操作返回图像
- c - 如何使用互斥锁在 C 中执行生产者-消费者程序
- c++ - SFINAE 和 std::numeric_limits
- android - 多次运行后未找到默认活动
- linux - 如何在用户使用 Shell 脚本输入的日期之后打印月份中的某一天(星期一,星期二)?
- amazon-web-services - 如何使用 SES 主体和 IAM 角色主体编写 AWS 存储桶策略
- javascript - 我尝试推入嵌套数组,但如果没有正确保存?