gpt4 book ai didi

database - Firebase 数据库 - UID 未知时共享数据?

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:44 25 4
gpt4 key购买 nike

在 Firebase 数据库中;如果 user_a 有他们可以访问的数据,并且他们想与 user_b 共享此数据,那么在特定用户之间安全共享此数据的最佳做法和数据库结构是什么?

重要:user_a 没有关于user_b 帐户的任何信息,例如uid.


详细示例:

1) user_a 有一个客户列表。

"users": {
"user_a": {
"clients": [
"clientUid",
"clientUid2"
]
}
},
"clients": {
"clientUid": {
"firstName": "John",
"lastName": "Doe"
},
"clientUid2": {
"firstName": "Joe",
"lastName": "Bloggs"
}
}

2) user_b 注册。 user_a 现在想在 clients 中与注册的 user_b 帐户共享 user_b 数据。

换句话说:user_a 有一个客户列表,其中一个创建了一个帐户并需要链接到 user_a 已经为他们输入的信息。


这里的一个重要元素是没有用户或帐户列表,可以从中发出“好友请求”以获取更多数据。我已经尝试创建一个简短的唯一 ID,用户可以在他们注册访问他们的数据时输入,但我不确定这是否是一个好的方法并且遇到了问题。

这与之前提出的“共享数据”问题不同,因为它侧重于两个用户之间的链接是如何建立的?不仅仅是之前和之后。

最佳答案

我知道有两种方法:

  • 要么用户必须都知道某个值,称为共享 secret 。
  • 或者您允许用户相互搜索。

共享 secret

共享 secret 可以很容易地在数据库中建模为一个位置,一旦您知道它就可以阅读。您的简短唯一 ID 是此类共享 secret 的一个示例,其中 user_a“确定” secret ,然后将其带外发送给 user_b

一个简单的流程:

  1. user_a 点击应用中的 Get secret 按钮
  2. 应用确定一个密码,例如correct-horse-battery-staple 和:

    2a。将密码写入数据库中不可查询但可读的位置,连同要共享的实际信息,在您的例子中是 user_a 的 UID。

    2b。向 user_a 显示密码。

  3. user_a 复制代码并通过其他通信机制将其发送给 user_b,例如文本、电子邮件、聊天。

  4. user_b 点击应用中的 Enter secret 按钮,然后粘贴密码。
  5. 应用读取位置,并能够读取 user_a 的 UID。

这个的数据结构可能是这样的:

"secrets": {
"correct-horse-battery-staple": "uidOfUserA"
}

您使用这些规则确保安全:

{
"rules": {
"secrets": {
"$secret": {
".read": true
}
}
}
}

因此上述规则不允许任何人读取/secrets,因此他们无法获得所有 secret 的列表。但是一旦他们知道一个 secret ,他们就可以查找它下面的相关数据。

允许搜索

另一种方法是在你的数据库中有一个用户列表,并允许 user_b 搜索他们从 user_a 知道的一些属性。一个共同的属性可能是他们的电子邮件地址或他们的显示名称,您可以将其存储在数据库中,例如:

users: {
"uidOfUserA": {
email: "userA@domain.com",
displayName: "user A"
},
"uidOfUserB": {
email: "userB@anotherdomain.com",
displayName: "user B"
}
}

允许用户相互搜索有点复杂,例如:它需要服务器端代码。这样做的原因是能够搜索数据集需要您可以读取该数据集。而在 Firebase 中,如果你可以读取一个数据集,你就可以获得它下面的所有数据。换句话说,要允许搜索用户,您需要能够读取所有 /users 并且允许这样做会泄露太多信息。

因此,要安全地实现搜索,您需要制定如下规则:

{
"rules": {
"users": {
"$uid": {
".read": true,
".write": "auth.uid === $uid"
}
}
}
}

换句话说:任何人都可以阅读他们知道 UID 的用户的个人资料,但每个用户只能修改自己的个人资料。

有了这个,您可以实现一个 Cloud Function,然后将电子邮件或显示名称作为输入,并搜索所有 /users。由于 Cloud Functions 以管理权限访问数据库,因此不受上述安全规则的限制。

关于database - Firebase 数据库 - UID 未知时共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53784606/

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