我正在尝试使用 Firebase 实现以下行为:
- 用户使用 Firebase 身份验证登录
- 用户将文件上传到 Firebase 存储
- 用户输入不同用户的电子邮件地址。该用户帐户可能已经存在。如果没有,收件人会收到一封电子邮件,提示他们注册。
- 上传的文件现在应该仅可供上传该文件的用户(读/写)和具有上述电子邮件地址的其他用户(只读)使用。
这是我到目前为止一直在尝试的:
- 使用 FirebaseAuth 注册后,我存储用户的电子邮件地址并
uid
在实时数据库中。
- 用户上传文件并输入收件人的电子邮件地址后,我会在实时数据库中检查该地址。如果存在,我检索收件人的
uid
并将其存储在文件的元数据中。
- 在我的 Firebase 存储安全规则中,我检查是否
auth.uid
匹配uid
存储在文件元数据中。
这应该可以正常工作,但是如果用户帐户尚不存在怎么办?
我有一种感觉,我想得太复杂了。有没有更简单的方法来实现这一目标,或者我忽略了什么?
编辑:我已经进行了更多调查,我认为一种方法是使用自定义身份验证令牌,这是 Firebase 存储指南建议的here。但这需要我设置自己的身份验证服务器,这从一开始就违背了使用 Firebase 身份验证的目的。有没有更简单的方法来实现这一目标?
这应该相当简单:
files
file_id_0
file_name: My File
read_write: uid_0
read_only:
uid_1: true
uid_2: true
当然你还有用户
users
uid_0
name: Larry
email: [email protected]
uid_1
name: Curly
email: cur[email protected]
uid_2
name: Moe
email: [email protected]
以及一些巧妙的概念规则
rules
.read: false
.writ: false
files
$file_id
//give the person that uploaded the file read access to this node as well as
// any user id that exists in the read_only node
.read: root.child('files').child($file_id).child('read_write').val = auth.uid ||
root.child('files').child($file_id).child("read_only').child(auth.uid) = true
//write access only to the user that created it
.write: root.child('files').child($file_id).child('read_write').val = auth.uid
非常接近了。
因此,当 uid_0 上传文件“我的文件”时,它会存储在 file_id_0 中。然后,该用户通过电子邮件“邀请”另一个用户(假设他们存在)访问该文件。在本例中,uid_0 邀请 uid_1 和 uid_2,并且这些用户 ID 被写入 file_id_0 节点。这些可以通过查询这两个用户的 /users 节点来获得。
症结在于邀请另一个尚不存在的用户。
我认为他们在那里玩的是有一个电子邮件观察列表节点。
watch_list
uid_0
[email protected]: file_id_0
每个用户都会观察用户节点,并观察其监视列表中是否存在新添加的用户电子邮件(uid_0 正在监视[电子邮件受保护])。然后将它们添加到 file_id_0 /read_only 节点并将其从监视列表中删除。
看看我刚刚写的,有点不优雅,所以可能有更好的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)