仅限我自己限制Firebase读/写访问权限

时间:2016-08-24 22:25:03

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

我有一个运行的静态网站:

config =
  apiKey: "HIDDEN"
  authDomain: "HIDDEN"
  databaseURL: "HIDDEN"
  storageBucket: ""

firebase.initializeApp(config)

在浏览器中(它编译为javacript)以使用Firebase的服务器进行身份验证。

我在这里感到困惑吗?这是从浏览器使用Firebase进行身份验证的有效方法吗?我从他们的“网络”教程中获得了代码,所以我认为它是。

现在,我需要配置我的Firebase数据库规则,以便我,只有我才能读取&写下来。

我怎么能做到这一点?这个例子是否足够?

这是仅允许对经过身份验证的用户进行读/写的给定示例

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

2 个答案:

答案 0 :(得分:9)

firebase.initializeApp(config)未对您进行身份验证,它只是在Firebase服务器上标识您的项目。相当于您必须知道您的家庭住址才能知道下班后去哪里。知道地址是先决条件,但仅仅获得访问权限是不够的。

如果您想要限制数据访问权限,那么这就意味着您必须首先使用Firebase进行身份识别。这与Firebase Authentication有关。例如,要使用电子邮件+密码登录,请执行以下操作:

firebase.auth().signInWithEmailAndPassword(email, password)

阅读documentation for email+password authentication了解完整步骤。

一旦您通过身份验证,您就会获得一个唯一ID;所谓的uid。您可以在Firebase控制台的“身份验证”标签中找到uid

the Firebase Auth console showing a user's information

使用此uid,您可以控制对数据(数据库和存储)的访问。因此,如果您从控制台复制uid并将其添加到安全规则中,则只有您(或知道您的电子邮件+密码的人)才能访问数据库:

{
  "rules": {
    ".read": "auth.uid == 'e836f712-4914-41df-aa80-5ade6b8b7874'",
    ".write": "auth == 'e836f712-4914-41df-aa80-5ade6b8b7874'"
  }
}

请注意,我在此代码段中添加了我自己的uid之一。就像知道您的API密钥或数据库URL不存在安全风险一样,也不知道我的uid。知道我是Frank van Puffelen,在Stack Overflow上user:209103并不意味着你可以冒充我。

答案 1 :(得分:2)

您问题中的规则将允许任何经过身份验证的用户读取和写入数据库中的任何键。如果您希望为了开发目的,配置单个用户并仅限制对该用户的访问,则可以使用以下规则:

{
  "rules": {
    ".read": "auth !== null && auth.uid === '<your-uid>'",
    ".write": "auth !== null && auth.uid === '<your-uid>'"
  }
}

对于您要登录的用户,<your-uid>用户UID 的位置 - 您可以在Auth下的Firebase控制台上找到它(您也可以在其中创建用户,如果你还没有这样做的话。)

通常情况下,Firebase将进行配置,以便用户可以创建帐户,并且将使用更细粒度的规则为用户提供对数据库特定部分的读写访问权限。