firebase实时更新安全规则,无需身份验证

时间:2021-05-04 09:08:37

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

我正在为我的家人开发一个私人应用程序,只是为了学习,所以没有分发,没有游戏商店等,只是为了我们......问题是 firebase 需要一个安全规则来使用 firebase,有一个几个类似的问题,不同的是,在我的情况下,对用户进行身份验证是无用的,我只有一个需要与所有人共享的列表,每个人都可以阅读和编写此列表。 那么,在这种情况下我应该如何更新安全规则?如果我不这样做,我将无法再连接到该数据库

2 个答案:

答案 0 :(得分:1)

不,如果您只想使用安全规则,则需要使用 Firebase 身份验证。如果您不想使用 Firebase 身份验证,则必须使用 Cloud Functions 或安全服务器环境才能使用 Firebase Admin SDK。

使用 Firebase 身份验证时的流程是什么样的?

您可以在 Firebase 实时数据库中创建一个单独的节点,其中包含您用户的 UID。 (您必须为此使用 Firebase 身份验证)。该节点可能类似于: enter image description here

然后您可以将规则设置为如下所示:

{
  "rules": {
    ".read": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
    ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'"
  }
}

现在,当任何用户尝试读/写您的数据库时,只有当他们的 UID 在该节点中时,才会允许该操作。

如何限制使用 Cloud 功能的访问权限?

在这里,您可以完全自由地决定事情的运作方式。它可能是您要求用户在请求数据或其他内容时输入的个人密码。


exports.addMessage = functions.https.onCall((data, context) => {
  if (data.password !== "yourSuperSecretPassword@123") {
    return {status: 401, error: "Unauthorized"}
  }
  // fetch data and return
});

尽管您无法仅使用 Firebase 安全规则而不使用 Firebase 身份验证来防止对您的数据库进行不必要的访问。

答案 1 :(得分:1)

我不是在建议这种策略,但问题说明了

<块引用>

在我的情况下,对用户进行身份验证是无用的

<块引用>

一个需要分享给大家,大家都可以阅读的列表 并写下这个清单

如果是这种情况,并且您希望您的数据库完全开放,任何人都可以读写,这就是答案

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

同样,不推荐用于任何用例,但它可以解决问题。

当您刚刚开始并且想要读写一些数据而不用担心身份验证时,这有时会很有用。