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

max*_*ner 6 javascript firebase-security firebase-authentication firebase-realtime-database

我有一个静态网站运行:

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

firebase.initializeApp(config)
Run Code Online (Sandbox Code Playgroud)

在浏览器中(它编译为javacript)与Firebase的服务器进行身份验证.

我在这迷茫吗?这是从浏览器使用Firebase进行身份验证的有效方法吗?我从他们的"网络"教程中得到了代码,所以我觉得它是.

现在,我需要配置我的Firebase数据库规则,以便我和我只能读取和写入它.

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

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

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 11

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

如果您希望将数据访问限制为"仅限于您",则表示您必须首先使用Firebase标识自己.这与Firebase身份验证有关.例如,要使用电子邮件+密码登录,您需要执行以下操作:

firebase.auth().signInWithEmailAndPassword(email, password)
Run Code Online (Sandbox Code Playgroud)

阅读完整步骤的电子邮件+密码验证文档.

经过身份验证后,您将获得一个唯一的ID; 一个所谓的uid.您可以uid在Firebase控制台的"身份验证"标签中找到您的身份.

Firebase Auth控制台显示用户的信息

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

{
  "rules": {
    ".read": "auth.uid == 'e836f712-4914-41df-aa80-5ade6b8b7874'",
    ".write": "auth == 'e836f712-4914-41df-aa80-5ade6b8b7874'"
  }
}
Run Code Online (Sandbox Code Playgroud)

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