在 Firebase 中使用访问代码的模式
Posted
技术标签:
【中文标题】在 Firebase 中使用访问代码的模式【英文标题】:Pattern for Using an Access Code with Firebase 【发布时间】:2017-02-28 20:01:56 【问题描述】:我目前正在为我的应用程序使用 Firebase,我想让我的应用程序的某些部分不仅需要用户授权,而且还可以是私有的,并要求用户输入访问代码才能进入。
我已经获得了与几个不同的提供者和匿名身份验证一起使用的授权部分。我的问题是,上述功能是否已经存在适当的模式?还是我需要编写一个单独的 Web 服务来处理这个要求?
【问题讨论】:
【参考方案1】:如果您想为您的数据库增加安全性,您最好查看有关 security rules 的 Firebase 文档
在Rules
下的database console
中,您将找到为您的数据库添加安全性的部分。基本上它是一个像这样的 JSON 对象:
"rules":
".read": "auth != null",
".write": "auth != null"
在上面的示例中,我只是声明要读取和写入完整的数据库,应该有一个登录用户。
以同样的方式,我建议您阅读文档的 auth 部分以及如何实现它here。
已编辑
由于上面的示例不够清楚,我在 Firebase 数据库中创建了另一个示例。在这个例子中,我有一个路径https://*****.firebaseio.com/users
。在下面的示例中,您可以看到我将true
分配给.read
属性,将auth != null
分配给.write
属性,这意味着每个人都可以读取此路径,但只有经过身份验证的用户才能在此路径中写入。
"rules":
"users":
".read": "true",
".write": "auth != null"
使用 Firebase 模拟器,您可以看到当您未通过身份验证时读取已启用。
但是,如果我想在不验证自己的情况下进行编写,则会出现错误。
现在,如果我在模拟器中使用身份验证,我可以执行写操作。
编辑版本 2“访问令牌”
好的,我明白你的意思了。我假设您要将此“访问代码”存储在 Firebase 数据库中的某个位置。如果您想验证数据库中的数据以允许读取或写入,您可以按照文档中的说明进行操作 here。
"rules":
"users":
".read": "root.child('access_token').child(auth.uid).exists()"
在上面的示例中,我在数据库中有一个名为 access_token
的路径,在此路径中我存储了一个密钥对 user_uid-accessToken,然后使用 root
属性进行查询以验证您是否有此路径中经过身份验证的用户。我正在使用exists()
,但您可以使用许多其他方法来进行此验证。例如,如果访问代码是硬编码的,那么您可以使用val()
方法来比较确切的值。
【讨论】:
我的 firebase 数据库使用我的自定义安全规则进行保护。此问题专门针对创建数据库区域的模式,该区域在经过身份验证的用户输入访问代码之前无法访问。 也许我没有正确解释自己,通过添加上面的代码,只有经过身份验证的用户才能在数据库中读取或写入,而不管您的自定义安全规则。"auth != null"
表示只有经过身份验证的用户(使用 Firebase 身份验证)才能读取或写入。这不是你想要的吗?
我现在意识到我需要编辑我的问题。这适用于已经通过身份验证的用户,但我需要锁定一部分结构,直到用户输入正确的访问代码。所以规则是 1. 用户通过身份验证(简单部分)和 2. 用户输入正确的访问代码(困难部分)
我编辑了这篇文章,向您展示如何完成访问代码验证。
谢谢!你的回答很有帮助。我将把它标记为答案,但是我决定走一条不同的路。不过,你让我朝着正确的方向前进,我相信其他人会感激这个答案。以上是关于在 Firebase 中使用访问代码的模式的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 存储上传图像不适用于亚马逊火灾(型号:Fire 7)
如何修复:“@angular/fire”'没有导出成员 'AngularFireModule'.ts(2305) ionic、firebase、angular