【问题标题】:Firestore Security Rules get FunctionFirestore 安全规则获取功能
【发布时间】:2020-04-29 11:09:21
【问题描述】:

我正在使用 Cloud Firestore 并尝试创建安全规则。 现在我遇到了这个问题:
我有一个获取用户数据的函数(存储在“/user_data”中)

function getUserData() {
    return get(/databases/$(database)/documents/user_data/$(request.auth.uid)).data;
}

还有一个虚拟函数来使用这些数据

function doStuff() {
   return getUserData() == null || getUserData() != null;
}

当我运行它时(使用经过身份验证的用户 - 使用用户文档) 它总是返回 false

有人可以帮忙吗?

【问题讨论】:

  • 您的具体目标是什么?检查user_data/$(request.auth.uid)的文档是否存在?或者该文档的特定字段具有特定值? data 返回一个“文档数据映射”,因此我不清楚你想用 getUserData() == nullgetUserData() != null 检查什么。
  • 我尝试检查列表是否包含特定值。由于这总是失败,我想知道我是否得到了数据。然后我构建了这个虚拟函数来测试,我不知道如何获取/使用数据映射。
  • 这个字段叫什么名字?
  • 可以通过data.fieldName获取字段的值,见firebase.google.com/docs/firestore/security/…
  • 名字是ownedLists,我想知道里面是否有特定的字符串

标签: firebase google-cloud-firestore firebase-authentication firebase-security


【解决方案1】:

以下应该可以解决问题(未经测试):

function getOwnedLists() {
    return get(/databases/$(database)/documents/user_data/$(request.auth.uid)).data.ownedLists;
}

function checkValueIsIn(valueToCheck) {
   return valueToCheck in getOwnedLists();
}

基于以下文档:

【讨论】:

  • 首先感谢您的回答。我已经尝试过类似的方法,但没有奏效。这也不起作用。也许错误在其他地方。是否需要任何附加条件(我可能已经忘记了)才能起作用?
  • 我又试了一次,它成功了。一定是某个地方打错了。非常感谢您的快速响应
猜你喜欢
  • 2020-01-14
  • 2019-11-09
  • 1970-01-01
  • 2019-12-27
  • 2018-11-09
  • 1970-01-01
  • 2018-04-14
  • 2020-07-07
  • 2018-10-19
相关资源
最近更新 更多