【问题标题】:How to check if the current user is authenticated on Firebase (Android Java)如何检查当前用户是否在 Firebase (Android Java) 上进行了身份验证
【发布时间】:2020-08-02 04:14:50
【问题描述】:

我只是第一次尝试 Firebase。

在我的 Firebase 实时数据库中,我维护了一个名为 blockedUsers 的子项中被禁止用户的 UID 列表。我的安全规则如下

{
  "rules": {
    ".read": "!root.child('blockedUsers').hasChild(auth.uid)",
    ".write": "!root.child('blockedUsers').hasChild(auth.uid)"
  }
}

到目前为止,如果blockedUsers 中的用户打开应用程序,他们将无法阅读任何内容。但我想在 MainActivity 阻止他们;也就是说,如果被禁止的用户打开应用程序,他们将立即被重定向到显示他们被禁止的屏幕。问题是,我无法检索blockedUsers,因为我被阻止了。我该怎么做?

【问题讨论】:

  • 所以只是为了澄清这里到底发生了什么,也许这会对任何未来的读者有所帮助 - 我在名为 blockedUsers 的节点中存储了一个被禁止用户的 UID 列表。假设如果用户在此列表中,他们根本无法在应用程序上执行任何操作。发生的事情是他们仍然可以打开 MainActivity,只是没有为他们加载任何内容。但是我想要的是让被禁止的用户立即被重定向到一个空白页面,说他们在一开始就被禁止了。但要做到这一点,我必须检查他们的禁止状态。而且我无法查看,因为我被禁止了,无法阅读列表。

标签: java android firebase firebase-realtime-database firebase-security


【解决方案1】:

如果您使用电子邮件作为注册,最好的方法是使用 UID。 在数据库中维护两个子节点,然后与它进行比较并保留所有代码。

【讨论】:

    【解决方案2】:

    安全规则不会影响您的应用程序代码的工作方式。它只会影响您在查询实时数据库时编写的代码查询的结果。

    如果您希望您的应用根据安全规则表现出不同的行为,您必须编写一个预期会被规则允许或拒绝的查询,然后决定如何处理该结果。

    【讨论】:

    • 实际上,我已经解决了这个问题。当我在检索被禁止的用户列表时侦听数据库节点时,如果用户被禁止,它将在 onCancelled() 中抛出 DatabaseError。我认为这是该用户被禁止并设置标志的提示。
    • 是的,这就是我的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2021-05-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多