【问题标题】:Deleted user has access to Firebase Firestore已删除的用户有权访问 Firebase Firestore
【发布时间】:2022-01-10 15:32:08
【问题描述】:

我的应用程序是公司内部软件。我想让所有经过身份验证的用户都可以访问 Firestore 中的所有文档以进行测试。 我在执行此操作时遇到了错误。

  1. 用户登录 iOS 应用并有权访问文档。
  2. 我从 Firebase 身份验证中删除了用户(通过 Firebase 控制台) 只要用户打开应用,他就会收到更新并可以读写。

这是规则中的代码:

  rules_version = '2';
  service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read : if request.auth != null
      allow write: if request.auth != null
    }
  }
}

如何防止已删除的用户继续访问?

【问题讨论】:

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


    【解决方案1】:
    1. 用户登录 iOS 应用并有权访问文档。

    这是预期的行为。

    1. 我从 Firebase 身份验证中删除用户(通过控制台)只要用户打开应用程序,他就会收到更新并且可以读写。

    当用户使用 Firebase 登录时,他会收到一个有效期约为一小时的令牌。不幸的是,由于每次调用都会进行昂贵的检查,因此无法撤销此类令牌。

    如果您从 Firebase 控制台删除用户帐号,该用户仍然可以访问长达一小时。在那段时间之后,需要刷新令牌。但是此操作将失败,因为该帐户不再存在。这样访问将在一小时内自动被禁用。

    但是,如果您想在令牌过期之前移除该访问权限,那么您应该考虑保留一个额外的禁用 UID 列表并随着时间的推移对其进行维护。例如,您可以将一个禁用的 UID 的全局列表/数组保存到一个文档中,并将 UID 添加到该文档中。最后,在您的安全规则中,您可以检查该特定 UID 是否未被禁止。如果该 UID 存在于该列表中,则 Firebase 服务器将拒绝该操作。

    编辑:

    另一个选项可能是禁用用户帐户。这与上述完成相同,并且在当前令牌过期后用户将无法获得新令牌。它还可以防止用户使用相同的凭据再次注册。

    【讨论】:

    • 不删除帐户,而是禁用它怎么样?这将立即阻止用户读写数据库的能力?
    • @Mises 请检查我的更新答案。
    • 设置规则将读取禁止用户的文档数组是对数据库的额外读取操作。有没有办法我可以禁用用户并将他添加到被禁止的用户文档中,然后临时设置规则以使用 admin SDK 检查这个禁止列表一小时?如果您不知道,请不要打扰。我会自己检查。我只是想知道你知道有没有可能。
    • @Mises 使用 admin SDK,很有可能。
    猜你喜欢
    • 2021-06-24
    • 2012-06-15
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多