gpt4 book ai didi

java - 实时数据库 Firebase 安全规则问题

转载 作者:行者123 更新时间:2023-11-30 00:04:01 28 4
gpt4 key购买 nike

我在 Android Studio 中创建了一个应用程序并将其与 Firebase 实时数据库相关联。我需要执行 3 次验证:

  1. 用户输入他的电话号码。和没有。针对我的数据库进行检查,如果存在则:

  2. 由 Firebase 的通知服务生成的一次性 PIN 和电话验证。

  3. 在下一个屏幕上,根据我的数据库检查用户的 pin,然后他最终进入菜单屏幕。

现在,我很困惑我应该设置什么作为我的安全规则,因为身份验证是在第 2 步进行的,所以我不能使用“auth”来设置规则,如果没有“auth”,数据库将是公开的(据我所知,如果我错了请纠正我)这是不安全的。可以做什么?

最佳答案

确实,正如您提到的,在第 1 步中没有身份验证。因此,如果您想“直接”读取实时数据库以检查电话号码是否存在,则无法避免每个人都可以访问列出所有电话号码的实时数据库节点。

另一种选择是使用通过 HTTPS(作为 REST API)调用的云功能,并检查给定的电话号码是否在授权电话号码列表中。

通过这种方式,您可以对电话号码列表应用一些限制性读取访问规则,因为 Clouds Function 将以管理员身份访问它。而不是公开所有电话号码的列表,您只允许检查一个电话号码是否已授权。

查看文档以了解如何创建可通过 HTTP 请求触发的函数 https://firebase.google.com/docs/functions/http-events

基本上你会做这样的事情:

exports.checkPhoneNbr = functions.https.onRequest((req, res) => {
let phoneNumberToCheck = req.query.phoneNumber;

return admin.database().ref('/phoneNumbers/' + phoneNumberToCheck).once('value').then(snapshot => {
if (snapshot.val()) {
//the phone number exists, do something, i.e. write to another database node or send back a successful HTTP response
//i.e. res.status(200).send("PhoneNbrExists");
} else {
//i.e. res.status(200).send("PhoneNbrDoesNotExist");
}
}
}

所以:

1/您从 Android 应用(通过 HTTPS)调用此函数,电话号码位于函数 URL 的 QueryString 中

2/云功能检查电话号码是否存在。如果是这样,它可以发回成功消息(或写入 RT DB 的其他节点)。如果不是,它会发回一条失败消息。

3/在 Android 应用中,在收到 Cloud Function 的响应后继续(或不)执行下一步

此外,请查看函数示例,尤其是 HTTP 示例,例如:

https://github.com/firebase/functions-samples/blob/master/quickstarts/time-server/functions/index.js

关于java - 实时数据库 Firebase 安全规则问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49356093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com