- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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 可以很容易地在数据库中建模为一个位置,一旦您知道它就可以阅读。您的简短唯一 ID 是此类共享 secret 的一个示例,其中 user_a
“确定” secret ,然后将其带外发送给 user_b
。
一个简单的流程:
user_a
点击应用中的 Get secret 按钮应用确定一个密码,例如correct-horse-battery-staple
和:
2a。将密码写入数据库中不可查询但可读的位置,连同要共享的实际信息,在您的例子中是 user_a
的 UID。
2b。向 user_a
显示密码。
user_a
复制代码并通过其他通信机制将其发送给 user_b
,例如文本、电子邮件、聊天。
user_b
点击应用中的 Enter secret 按钮,然后粘贴密码。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/
如果满足条件,我如何才能只获取特定记录? 我有代码为 "SELECT a.id, a.text, a.uid, a.time FROM story a INNER JOIN friends b
每当我尝试提取用户的 uid 时,它都会给我电子邮件。有谁知道为什么? var user = firebase.auth().currentUser; if (user != null
我正在为自己的业务编写一个简单的客户数据库(新娘礼服),并尝试实现以下目标: 我尝试过滤掉那些没有“ordered = 1”标志的uid。因此,不应显示来自用户的所有条目,其中至少一个条目具有“ord
我有一张表,UID 是主键。在旧系统中,它不是主键。因此,人们可以向该字段插入数据,但我们不想再这样做了。 在这个表中,我在 UID 2000 和 2005 之间有一个差距(2003 被占用)。我如何
我刚开始使用 Firebase(我正在使用react-redux-firebase,但不确定这是否与这个问题相关)。我在使用这些标准身份验证规则时遇到问题: { "rules": {
警告:我对一般编码和 xcode 非常陌生 运行 Xcode 8.2 无论如何,我已经保存了我的用户身份验证详细信息、电子邮件密码。我将它们保存在 user/currentUser.UID 下,它提供
有人知道吗,如果我从我的应用程序启动 android web-view 窗口,它是否与启动它的应用程序具有相同的 UID。我正在使用三星手机,我认为他们使用的是 Web-Kit 浏览器,但我也想知道使
我有一个正在注册用户的注册表单,如果注册完成,应该重定向到index.html(主页)。 问题:按下提交按钮后,页面刷新并且表单获取重置,不会重定向,除非我按 CTRL + SHIFT + R 然后将
这个问题在这里已经有了答案: SecurityException: caller uid XXXX is different than the authenticator's uid (17 个答案
我正在尝试构建一个基于 PHP 的 Web 软件,但我遇到了一个我不知道解决方案语法的问题。 基本上,我有两个表: +-------------+ +---------------+ | Ce
我有一个 Firebase 表,其中包含任务列表。 任务有一个名为 uid 的字段。 我想获取我传入的 uid == uid 的所有任务。 最佳答案 Firebase 允许您对一组数据进行排序和过滤。
这是一个 set-root-uid 程序 $ls -l -rwsr-sr-x 1 root root 7406 2011-12-13 22:37 ./x* 源代码: int main(void) {
我在 OSX 上使用 emacs 24.5.1 和 mu4e 和 mbsync。我正在与 imac 和笔记本电脑同步,所以可能与前面提到的错误相同 here ,但没有人发布解决方案。 我的具体错误是在
我注意到 access(2) 系统调用使用真实且无效的用户 ID 进行访问控制检查的困难之处。虽然这与 Linux 上的 access(2) 手册页所说的一致,但对我来说仍然没有什么意义......
我需要帮助来了解如何创建数据库系统,以便每个用户都有自己的数据,我想确保当我从我的站点发送数据时,它是用这个顺序保存的(集合名称)/(创建该数据的用户的 uid)/(名称由日期创建的文档#this 我
假设我有一个独特的 VarChar(32) 列。 例如。 13bfa574e23848b68f1b7b5ff6d794e1。 我想在将列转换为 int 时保留它的唯一性。我想我可以将所有字母转换为它们
我想弄清楚如何将我的“数据”数组中的 Firebase UID 字符串与我从 firebase 调用中提取的键相匹配。我需要将“数据”数组中的字符串与“键”相匹配,然后我就可以按我想要的方式操作数据。
如果我使用 imaplib 在收件箱中有此邮件的 UID,如何获取所有 Maill 文件夹中邮件的 UID?如您所知,所有邮件和收件箱中的两个实例中的谷歌商店邮件我想使用 imaplib 将其移动到垃
我正在制作一个控制电话网络状态的应用(在 2G/3G 之间切换)。 出于某种原因,我的应用程序使用 sharedUserId="android.uid.system",但在 Phone 上下文下运行(
我在尝试实现 Sample Sync Adapter 应用程序时收到上述异常。我看过很多与此问题相关的帖子,但没有令人满意的回复。 所以我会记下my solution在这里以防其他人遇到同样的问题。
我是一名优秀的程序员,十分优秀!