4

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

过去,我可以在几分钟内使用 PHP 进行设置。但是有了 Firebase,这已经变成了一场我似乎无法取胜的战斗。

使用在 Firebase 网站上找到的轻量级文档,我终于能够成功注册和验证用户。伟大的。

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

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

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

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

(顺便说一句,我尝试按照 Firebase 网站上的建议将这个问题通过电子邮件发送到 firebase-talk@googlegroups.com……但根据 Google 的退回消息,该组似乎不存在。)

4

2 回答 2

10

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

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

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

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

这是一个例子:

假设您有一个用户列表,其中每个用户都由用户 id 键入,例如/users/<user-id>/<data>,并且您希望确保只有登录的用户才能读取/写入他们自己的数据。使用简单登录,这真的很容易!

查看电子邮件/密码身份验证文档的“身份验证后 ”部分,我们看到 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,用户必须经过身份验证并作为 user 进行身份验证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
  }
});

希望有帮助!

于 2013-12-30T16:00:49.613 回答
2

请注意:

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

有关更多信息,请参阅此页面: https ://www.firebase.com/docs/web/guide/user-auth.html

于 2014-10-09T14:21:27.310 回答