将用户数据保存在firebase firestore中的最佳做法?

将用户数据保存在firebase firestore中的最佳做法?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我正在使用firebase作为我的Android应用程序的后端。该应用程序是一个社交媒体应用程序,用户可以在其中发布、评论等。因此,我将用户数据存储在user\u集合中,该集合由安全规则保护,其中ifuid==auth.uid(任何用户只能访问自己的数据) 现在在这个应用程序中,当一个用户发布一些东西时,每个用户都可以看到这个帖子。在post_集合中,我将用户ID保存在post_文档中 所以问题是我需要向其他用户显示用户名,并且我只有userId,但问题是由于安全规则,用户无法通过uid获取其他

我正在使用firebase作为我的Android应用程序的后端。该应用程序是一个社交媒体应用程序,用户可以在其中发布、评论等。因此,我将用户数据存储在
user\u集合
中,该集合由安全规则保护,其中if
uid==auth.uid
(任何用户只能访问自己的数据)

现在在这个应用程序中,当一个用户发布一些东西时,每个用户都可以看到这个帖子。在post_集合中,我将用户ID保存在post_文档中

所以问题是我需要向其他用户显示用户名,并且我只有userId,但问题是由于安全规则,用户无法通过uid获取其他用户的名称。现在我必须为这个问题提供解决方案请告诉我哪一个更好,或者您也可以建议其他解决方案?

  • 我可以使用云函数
    getUserNameById()
    (问题:当用户滚动时,我需要在提要中频繁调用此函数)

  • 我还可以在
    post\u doc
    中存储姓名(问题:当用户更改姓名时,它将在旧帖子中显示旧姓名)


  • 感谢您的善意帮助

    考虑解决方案:您需要的任何公共数据(作者姓名、作者用户PIC链接等)只需在帖子创建时与帖子一起保存即可。 因此,您的消息Pojo将如下所示:

    • 身份证
    • 作者姓名
    • 正文
    等等

    只需显示此名称(authorName)。
    即使没有严格的安全措施(因为这需要时间和文档读取),随时前往User_collection文件夹取用户名也不是一个好办法。

    在您描述的场景中,我通常会将用户名存储在每个post doc中。我也会忽略名称的更新,因为我认为post doc中的用户名是一个历史值:这是用户发布此内容时的名称。当然,现在您可能需要不同的行为,在这种情况下,我建议您阅读:


    您使用云函数的方法也很好,在某些情况下非常常见。但是我倾向于只使用云函数来读取数据,因为读取操作本身特别复杂,这里不是这样。在这样的情况下,我建议提出一个数据模型,允许您需要的用例和安全性

    例如:如果创建一个集合
    usernames
    ,其中每个文档都有UID作为其文档ID,然后包含一个包含该UID用户名的字段,则可以通过Firestore实现用户名的查找

    所以你可以:

  • 将完整的用户配置文件存储在
    /users/$uid
  • 将用户名存储在
    /usernames/$uid
  • 有一个云函数,在写入
    /users/$uid
    时触发,并更新
    /usernames/$uid
  • 然后,客户机可以读取每个
    /usernames/$uid
    文档,甚至可以在需要时一次性读取整个
    /usernames
    集合

  • 通过这种方式,可以在客户端缓存用户名,并在应用程序脱机时继续工作,这与使用云函数查找用户名的方法不同。

    非常感谢,我已经接受了您的答案。另一个问题的链接非常有用&我将采用不关心的方法。哈哈。。。。。