【问题标题】:What are the risks of using a phonenumber as the users documentID and how can I efficiently query users based on their phoneNumber使用电话号码作为用户 documentID 的风险是什么?如何根据电话号码有效地查询用户
【发布时间】:2020-03-13 11:31:56
【问题描述】:

我正在开发一个移动应用程序,用户可以使用手机登录并邀请其他人加入群组(如果他们有电话号码)。我在 Firestore 中设置了以下内容。

我正计划编写规则,使用户只能编辑自己的文档。他们可以通过邀请相互邀请,这样用户就可以自己加入一个组。而且他们只能通过号码查找手机中的用户。

但我想知道我是不是在这里玩火?使用电话号码作为文档 ID 有哪些风险?我是新手,我想尽可能安全地保存用户的数据。但我也不希望对文档进行太多查找/查询。关于如何改进我的设计的任何提示?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    使用电话号码作为用户 documentID 有什么风险?

    只要用户不更改他们的电话号码,这没有什么问题。但如果他们会改变,你可能会遇到困难。我这么说是因为您无法“重命名”文档ID。您可以复制相同的文档并更改文档 ID,但这意味着读取新文档以及新的写入操作。

    您可以改为使用来自Firebase authentication processuid 作为文档ID。无论电话号码是什么,这个uid 始终是相同的。

    我正计划编写规则,使用户只能编辑自己的文档。

    即使您使用uid,也可以实现这一点。


    编辑:

    o use as a document id" 我想根据用户集合检查用户电话簿以找到具有相应电话号码的用户。

    您最初可能想使用:

    db.collection("users").document(phoneNumber).get();
    

    但是您可以使用查询实现完全相同的目标:

    db.collection("users").whereEqualTo("phoneNumber", phoneNumber).get();
    

    这样做会是一个代价高昂的查询吗?

    不,您只需阅读一份文件即可付费。

    该查询是否计为文档读取?

    是的,这很重要。另请注意,即使查询没有产生任何文档,读取一个文档也会产生成本。

    【讨论】:

    • "你可以做的就是用作文档 ID" 我想根据用户集合检查用户电话簿,以找到具有相应电话号码的用户。这样做会是一个代价高昂的查询吗?该查询是否计入文档读取?通过查询,我的意思是 where() 函数。
    • 感谢这个答案让我更清楚了!给它一个赞成票。
    • 很高兴听到这个消息 ;)
    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多