gpt4 book ai didi

Firebase - 限制特定用户访问文件

转载 作者:行者123 更新时间:2023-12-01 04:55:13 24 4
gpt4 key购买 nike

我正在尝试使用 Firebase 实现以下行为:

  • 用户使用 Firebase 身份验证登录
  • 用户将文件上传到 Firebase 存储
  • 用户输入不同用户的电子邮件地址。此用户帐户可能已存在。如果没有,收件人会收到一封电子邮件,提示他们注册。
  • 上传的文件现在应该只对上传它的用户(读/写)和具有上述电子邮件地址的其他用户可用(只读)。

  • 这是我到目前为止一直在尝试的:
  • 使用 FirebaseAuth 注册后,我存储了用户的电子邮件地址和 uid在实时数据库中。
  • 在用户上传文件并输入收件人的电子邮件地址后,我会检查该地址的实时数据库。如果存在,我检索收件人的 uid并将其存储在文件的元数据中。
  • 在我的 Firebase 存储安全规则中,我检查了 auth.uid匹配 uid存储在文件元数据中。

  • 这应该可以正常工作,但是如果用户帐户尚不存在,我该怎么办?
  • 我可以在用户输入收件人的电子邮件地址后创建一个新帐户。如果我这样做,我必须指定一个密码。我可以指定一个随 secret 码并使用密码重置电子邮件,但这不是一个好的用户体验,也是因为您无法完全自定义重置电子邮件。
  • 如果我不立即创建新帐户,我如何确保只有拥有此电子邮件地址的用户才能访问该文件?将电子邮件地址存储在文件的元数据中不起作用,因为它可能会在以后更改。

  • 我有一种感觉,我在这里想得太复杂了。有没有更简单的方法来实现这一目标,还是我忽略了什么?

    编辑:我进行了更多调查,我认为一种方法是使用自定义身份验证 token ,这是 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: larry@stooges.com
    uid_1
    name: Curly
    email: curly@stooges.com
    uid_2
    name: Moe
    email: moe@stooges.com

    和一些漂亮的概念规则
    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 上传文件 My File 时,它​​存储在 file_id_0 中。该用户然后通过他们的电子邮件(假设他们存在)“邀请”另一个用户访问该文件。在这种情况下 uid_0 邀请 uid_1 和 uid_2 并且这些用户 ID 被写入 file_id_0 节点。这些将通过查询这两个用户的/users 节点来获得。

    症结在于邀请另一个不存在的用户。

    我认为他们在那里玩是为了有一个电子邮件监视列表节点。
    watch_list
    uid_0
    moe@stooges.com: file_id_0

    每个用户都会观察用户节点,以及他们的监视列表中是否存在新添加的用户电子邮件(uid_0 正在监视 moe@stooges.com)。然后将它们添加到 file_id_0/read_only 节点并将其从监视列表中删除。

    看看我刚刚写的,有点不雅致,所以可能有更好的方法。

    关于Firebase - 限制特定用户访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820471/

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