我正在浏览通过这个链接找到的教程...
https://www.positronx.io/full-angular-7-firebase-authentication-system/
然而,它似乎没有涵盖如何为用户设置规则以读取和写入自己的数据的信息。我不确定如何做到这一点,并且我在网上找到一个与上面教程中解释的设置相同的解释时遇到了困难。
有没有人能够以这种方式设置他们的身份验证系统并实现相同的安全规则?
谢谢。
发布于 2021-10-12 18:11:58
- firebase信息 -我理解这是一个相当宽泛的答案,但应该考虑到理解深度的上下文-
Firebase实时数据库安全规则确定谁对您的数据库具有读写访问权限、您的数据的结构如何以及存在哪些索引。这些规则驻留在Firebase服务器上,并始终自动执行。只有在您的规则允许的情况下,每个读写请求才会完成。默认情况下,您的规则不允许任何人访问您的数据库。这是为了保护您的数据库不被滥用,直到您有时间自定义规则或设置身份验证。
实时数据库安全规则具有类似JavaScript的语法,分为四种类型:
规则类型
.read
Describes if and when data is allowed to be read by users..write
Describes if and when data is allowed to be written.
.validate
Defines what a correctly formatted value will look like, whether it has child attributes, and the data type.
.indexOn
Specifies a child to index to support ordering and querying.实时数据库安全性概述
Firebase实时数据库提供了一套完整的工具来管理应用程序的安全性。这些工具使您可以轻松地对用户进行身份验证、实施用户权限和验证输入。
基于Firebase的应用程序运行的客户端代码比使用许多其他技术堆栈的应用程序更多。因此,我们处理安全性的方式可能与您习惯的方式略有不同。
Firebase实时数据库为您处理许多其他安全详细信息。例如,我们的证书使用具有强2048位密钥的SSL,并且我们遵循身份验证令牌的最佳实践。
Authentication
保护你的应用程序的第一步通常是识别你的用户。此过程称为身份验证。您可以使用Firebase身份验证让用户登录到您的应用程序。Firebase身份验证包括对常见身份验证方法的插件支持,如Google和Facebook,以及电子邮件和密码登录、匿名登录等。
用户身份是一个重要的安全概念。不同的用户有不同的数据,有时他们有不同的能力。例如,在聊天应用程序中,每条消息都与创建它的用户相关联。用户也可以删除自己的消息,但不能删除其他用户发布的消息。
授权
识别用户身份只是安全性的一部分。一旦您知道他们是谁,您就需要一种方法来控制他们对数据库中数据的访问。实时数据库安全规则允许您控制每个用户的访问权限。例如,这里有一组安全规则,允许任何人读取路径/foo/,但没有人对其进行写入:
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}.read和.write规则级联,因此此规则集授予对路径/foo/以及任何更深的路径(如/foo/bar/baz )上的任何数据的读取访问权限。请注意,数据库中较浅的.read和.write规则覆盖了较深的规则,因此在本例中,即使路径/foo/bar/baz处的规则评估为false,仍将授予对/foo/bar/baz的读取访问权限。
实时数据库安全规则包括内置的变量和函数,允许您引用其他路径、服务器端时间戳、身份验证信息等。下面是一个规则示例,该规则向经过身份验证的用户授予对/users/<uid>/的写访问权限,其中<uid>是通过Firebase身份验证获得的用户的ID。
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}数据验证
Firebase实时数据库是无模式的。这使得在开发时很容易进行更改,但一旦您的应用程序准备好分发,保持数据的一致性就很重要。规则语言包括一个.validate规则,它允许您使用与.read和.write规则相同的表达式来应用验证逻辑。唯一的区别是验证规则不会级联,因此所有相关的验证规则都必须求值为true才能允许写入。
这些规则强制要求写入/foo/的数据必须是少于100个字符的字符串:
{
"rules": {
"foo": {
".validate": "newData.isString() && newData.val().length < 100"
}
}
}验证规则可以访问与.read和.write规则相同的所有内置函数和变量。您可以使用它们来创建验证规则,这些规则可以识别数据库中其他位置的数据、用户的身份、服务器时间等等。
注意:.validate规则仅针对非空值进行评估,并且不级联。定义数据库索引
Firebase实时数据库允许对数据进行排序和查询。对于较小的数据量,数据库支持即席查询,因此在开发过程中通常不需要索引。但是,在启动应用程序之前,重要的是要为任何查询指定索引,以确保它们随着应用程序的增长而继续工作。
使用.indexOn规则指定索引。下面是一个示例索引声明,它将为恐龙列表的高度和长度字段建立索引:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}https://stackoverflow.com/questions/69545095
复制相似问题