我是Firebase的新手,我正在尝试使用电子邮件/密码设置简单的身份验证系统。最初的概念很简单:你注册。然后,登录后,您可以访问移动应用程序的其余部分。
过去,我可以在几分钟内用PHP设置它。但是对于Firebase来说,这已经成为一场我似乎无法获胜的战斗。
使用Firebase网站上的轻量级文档,我终于能够成功注册并验证用户身份。大。
不幸的是,无论用户是否登录,人们仍然可以访问应用程序的其余部分。如何保护应用程序免受未经身份验证的用户的侵害?
另外,如何将页面上提交的数据与经过身份验证的用户相关联?
我查看了Firebase的文档。它缺乏实用的身份验证示例。它一直把我作为样本引用我的Firefeed应用程序。我看过Firefeed的代码,认证系统似乎1)对于登录系统来说过于复杂,2)过于错综复杂地与新闻提要相关联,这是一个值得学习的实际例子。
另一方面,也许我只是遗漏了一些明显和根本的东西。如果有人能指出我正确的方向,那将是伟大的。谢谢! : - )
(顺便说一句,我尝试将此问题通过电子邮件发送到firebase-talk@googlegroups.com,如Firebase网站上所建议的那样......但根据谷歌发布的退回消息,该群组似乎不存在。)
答案 0 :(得分:8)
退一步,值得注意的是Firebase简单登录是为了方便而构建在Firebase Custom Login之上的抽象。如果您愿意,您仍然可以使用自定义登录功能将您现有的身份验证用于Firebase。
Firebase Simple Login无需您仅为身份验证运行服务器。但是,与PHP示例没有1对1并行,其中服务器将根据服务器上检测到的会话来管理请求访问,因为所有逻辑,模板等都存在于客户端代码中。
在大多数情况下,您的客户端逻辑,模板,资产等将是静态和公共的。您真正想要保护的是用户和应用程序数据,这就是Firebase身份验证(无论是使用简单登录还是自定义登录)的地方.Firebase身份验证本质上是令牌生成 - 获取已确认的,可识别的用户数据并将其安全地传递给Firebase让它无法被欺骗。
对Firebase数据树中不同路径的读/写访问权限由Firebase Security Rules管理,允许您编写类似JavaScript的表达式来控制哪些客户端可以访问哪些数据。
以下是一个例子:
假设您有一个用户列表,其中每个用户都按用户ID键入, 例如
/users/<user-id>/<data>
,并且您只想确保这一点 登录用户可以读/写自己的数据。使用简单登录, 这真的很容易!查看After Authenticating 电子邮件/密码验证文档部分,我们看到了 我们的安全规则中的
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
进行身份验证和身份验证。
Security Quickstart中涵盖了上述大部分内容,但无可否认,有点难以理解。
回到初始问题,如果您想在未经过身份验证的情况下重定向某些路径,可以执行以下操作:
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
}
});
希望有所帮助!
答案 1 :(得分:2)
请注意:
登录现在是Firebase的核心功能。简单登录已经 已弃用且此客户端的文档现已可用 Github上。
有关详细信息,请参阅此页面: https://www.firebase.com/docs/web/guide/user-auth.html