Firebase使用电子邮件/密码进行简单身份验证

Firebase使用电子邮件/密码进行简单身份验证,firebase,firebase-security,Firebase,Firebase Security,我是Firebase的新手,我正在尝试使用电子邮件/密码设置一个简单的身份验证系统。最初的概念很简单:注册。然后,在登录后,您可以访问移动应用程序的其余部分 在过去,我可以用PHP在几分钟内完成设置。但对于Firebase,这已经成为一场我似乎无法赢得的战斗 使用Firebase网站上的light文档,我终于能够成功注册和验证一个用户。太好了 不幸的是,无论用户是否登录,他们仍然可以访问应用程序的其余部分。如何保护应用程序不受未经身份验证的用户的攻击 另外,如何将页面上提交的数据与经过身份验证的

我是Firebase的新手,我正在尝试使用电子邮件/密码设置一个简单的身份验证系统。最初的概念很简单:注册。然后,在登录后,您可以访问移动应用程序的其余部分

在过去,我可以用PHP在几分钟内完成设置。但对于Firebase,这已经成为一场我似乎无法赢得的战斗

使用Firebase网站上的light文档,我终于能够成功注册和验证一个用户。太好了

不幸的是,无论用户是否登录,他们仍然可以访问应用程序的其余部分。如何保护应用程序不受未经身份验证的用户的攻击

另外,如何将页面上提交的数据与经过身份验证的用户关联

我看过Firebase的文档。它缺乏认证的实际例子。它一直在引用Firefeed应用程序作为示例。我看了Firefeed的代码,认证系统似乎1)对于登录系统来说过于复杂,2)与新闻提要的联系过于复杂,无法作为一个实用的示例来学习

另一方面,也许我只是错过了一些明显的和基本的东西。如果有人能给我指出正确的方向,那就太好了。谢谢!:-)


(顺便说一句,我试着把这个问题发电子邮件给firebase-talk@googlegroups.com,正如Firebase网站上所建议的那样……但根据谷歌的回复信息,该组织似乎并不存在。)

退一步说,值得注意的是,Firebase简单登录是为方便起见而在其上构建的一个抽象。如果愿意,您仍然可以使用自定义登录使用Firebase的现有身份验证

Firebase简单登录无需运行服务器进行身份验证。但是,没有一个与PHP示例类似的1对1模式,在PHP示例中,服务器将根据服务器上检测到的会话来管理请求访问,因为您的所有逻辑、模板等都存在于客户端代码中

在大多数情况下,客户端逻辑、模板、资产等都是静态的和公共的。您真正想要保护的是用户和应用程序数据,这就是Firebase身份验证(无论是使用简单登录还是自定义登录)的用武之地。Firebase身份验证本质上是令牌生成——获取确认的、可识别的用户数据,并将其安全地传递给Firebase,以便它不会被欺骗

Firebase数据树中不同路径的读/写访问权限由控制,允许您编写类似JavaScript的表达式来控制哪些客户端可以访问哪些数据

下面是一个例子:

假设您有一个用户列表,其中每个用户都由用户id键入, 例如
/users/
,您希望确保 登录用户可以读取/写入自己的数据。通过简单的登录, 这真的很容易

看着 在电子邮件/密码验证文档中,我们看到 安全规则中的
auth
变量将包含多个字段 经过身份验证(包括
id
)后,用户的唯一用户id。现在 我们可以编写安全规则:

{
  "rules": {
    ".read": false,
    ".write": false,
    "users": {
      "$userid": {
        ".read": "auth != null && auth.uid == $userid",
        ".write": "auth != null && auth.uid == $userid"
       }
    }
  }
}
这是怎么回事?Firebase身份验证(使用简单登录) 安全地生成了一个令牌,其中包含您的已验证用户数据 登录,该令牌数据将在您的安全规则中可用 通过连接的
auth
变量。现在,为了一个客户 要读取或写入到
/users/xyz
的连接,用户必须是 作为用户进行身份验证和身份验证
xyz

上面的大部分内容都包含在文章中,但不可否认,这有点难以理解

回到最初的问题,如果您想在用户未经身份验证时从某些路径重定向,可以执行以下操作:

var ref = new Firebase(...);
var auth = new FirebaseSimpleLogin(ref, function(error, user) {
  if (!user) {
    // we're logged out, so redirect to somewhere else
  } else {
    // we're logged in! proceed as normal
  }
});
希望有帮助

请注意:

登录现在是Firebase的核心功能。简单登录已被删除 此客户端的已弃用和文档现已在上提供 Github

有关更多信息,请参阅本页:

关于谷歌集团,请仔细检查您发送到的地址。在您上面的帖子中,它看起来是正确的,但是请注意,该组仍然处于活动状态,并且可以在处使用。我将其发送到以下地址(复制/粘贴):firebase-talk@googlegroups.com下面是谷歌的回复(也可以复制/粘贴):“我们写信是想让你知道你试图联系的团体(firebase talk)可能不存在,或者您可能没有向群中发布消息的权限。有关您无法发布消息的更多详细信息:“不确定为什么它不起作用,但正如您的链接所示,它显然存在。顺便问一下,我的问题被否决的原因是什么?您是否费心搜索此网站?这更多的是一个咆哮,而不是一个问题。尝试遵循这些指导原则谢谢,我感谢你花时间提供全面的回复。我会仔细检查一下,看看是否能取得一些进展。再次感谢@如果你认为这回答了你的问题,请考虑把它标记为帮助社区的答案: