Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 存储公开可写数据的方法应该是什么?_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Firebase 存储公开可写数据的方法应该是什么?

Firebase 存储公开可写数据的方法应该是什么?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有一个用户档案收藏。目前,它只能由其配置文件为的用户写入 现在,我想记录“配置文件访问次数”的计数,比如说profileVisitedCount。而且,如果未登录的用户访问配置文件,它也会计算在内 如果我将计数存储在firebase js客户端库的用户配置文件集合本身的文档中,则必须使其可公开写入 我想的另一个选择是使用云功能。它只会增加profileVisitedCount,而无需使文档可公开写入。但不确定这是否是一种正确的方法,因为云函数端点似乎仍然易受攻击,可以由bot调用 此外,是的,

我有一个
用户档案
收藏。目前,它只能由其配置文件为的用户写入

现在,我想记录“配置文件访问次数”的计数,比如说
profileVisitedCount
。而且,如果未登录的用户访问配置文件,它也会计算在内

如果我将计数存储在firebase js客户端库的
用户配置文件
集合本身的文档中,则必须使其可公开写入

我想的另一个选择是使用云功能。它只会增加
profileVisitedCount
,而无需使文档可公开写入。但不确定这是否是一种正确的方法,因为云函数端点似乎仍然易受攻击,可以由bot调用

此外,是的,‘个人资料访问次数’类数据应该记录在GA等分析中,但我需要将此计数用于显示访问次数最多的个人资料等业务逻辑之一


那么,有没有关于数据应该如何构造的指导?谢谢

您可以拥有另一个名为
ProfileVisitCounters
的集合,在该集合中,您可以为每个用户存储一个文档,文档Id与用户Id相对应。在此用户文档中,您可以维护一个专用的
profileVisitedCount
字段,用户每次读取相应的配置文件时都会更新该字段

使用
allow read,write:if true为该集合分配完全读写访问权限


在您的问题中,在提到云功能解决方案时,您写道“云功能端点似乎仍然易受攻击,可以由bot调用”。请注意,对于具有完全写访问权限的额外集合,如上所述,情况也会如此:例如,知道集合名称和用户uid的人可以调用JavaScript SDK的
update()
方法,或者更简单的调用JavaScript SDK的端点


如果您想避免这种风险,可以使用a来读取用户配置文件,正如您所提到的那样。此云功能将:

  • 获取用户配置文件数据
  • 增加
    profileVisitedCount
    字段(在用户配置文件文档中)
  • 将用户配置文件数据发送回客户端
  • 您需要拒绝对
    用户配置文件
    集合的读取访问权,以便强制用户通过云功能“读取”它

    通过这种方式,您可以确保
    profileVisitedCount
    字段仅在读取“真实”用户配置文件时才会递增

    另外请注意,如果有两个不同的集合为您的业务案例带来了一些额外的优势,那么您仍然可以保留
    profilevisitsconters
    集合。在这种情况下,云函数将增加此集合中的计数器,而不是在用户配置文件本身中增加它。您将限制
    profilevisitsconters
    集合的访问权限为只读,因为云函数绕过了安全规则。(
    允许读取:如果为真;允许写入:如果为假;



    最后,请注意,阅读本文可能会很有趣,其中详细介绍了使用云函数查询Firebase数据库的优缺点。

    您可以使用另一个集合,例如,
    profilevisitcounters
    在其中,每个用户存储一个文档,文档Id与用户Id对应。在此用户文档中,您维护一个专用的
    profileVisitedCount
    字段,用户每次读取相应的配置文件时都会更新该字段

    使用
    allow read,write:if true为该集合分配完全读写访问权限


    在您的问题中,在提到云功能解决方案时,您写道“云功能端点似乎仍然易受攻击,可以由bot调用”。请注意,对于具有完全写访问权限的额外集合,如上所述,情况也会如此:例如,知道集合名称和用户uid的人可以调用JavaScript SDK的
    update()
    方法,或者更简单的调用JavaScript SDK的端点


    如前所述,如果您想避免这种风险,可以使用a来阅读用户配置文件。此云功能将:

  • 获取用户配置文件数据
  • 增加
    profileVisitedCount
    字段(在用户配置文件文档中)
  • 将用户配置文件数据发送回客户端
  • 您需要拒绝对
    用户配置文件
    集合的读取访问权,以便强制用户通过云功能“读取”它

    通过这种方式,您可以确保
    profileVisitedCount
    字段仅在读取“真实”用户配置文件时才会递增

    另外请注意,如果有两个不同的集合为您的业务案例带来了一些额外的优势,那么您仍然可以保留
    profilevisitsconters
    集合。在这种情况下,云函数将增加此集合中的计数器,而不是在用户配置文件本身中增加它。您将限制
    profilevisitsconters
    集合的访问权限为只读,因为云函数绕过了安全规则。(
    允许读取:如果为真;允许写入:如果为假;



    最后,请注意,阅读本文可能会很有趣,其中详细介绍了使用云函数查询Firebase数据库的优缺点。

    Thank@Renaud Tarnec,感谢您提供详细的解释和选项。如果我使用callable Cloud函数来读取用户配置文件,它不会再次公开,并且可以被bot脚本调用吗?感谢@Renaud Tarnec,感谢详细的解释和选项。若我使用callable Cloud函数来读取用户配置文件,它不会再次公开,并且可以被bot脚本调用吗?