退后一步,值得注意的是 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
}
});
希望有帮助!