我是Firebase的新手,我正在尝试使用电子邮件/密码设置一个简单的身份验证系统.最初的概念很简单:你注册.然后,登录后,您可以访问移动应用程序的其余部分.
在过去,我可以在几分钟内用PHP设置它.但是对于Firebase来说,这已经成为一场我似乎无法获胜的战斗.
使用Firebase网站上的轻量文档,我终于能够成功注册并验证用户身份.大.
不幸的是,无论用户是否登录,人们仍然可以访问应用程序的其余部分.如何保护应用程序免受未经身份验证的用户的侵害?
另外,如何将页面上提交的数据与经过身份验证的用户相关联?
我查看了Firebase的文档.它缺乏实用的身份验证示例.它一直把我作为样本引用我的Firefeed应用程序.我看过Firefeed的代码,认证系统似乎1)对于登录系统来说过于复杂,2)过于错综复杂地与新闻提要相关联,这是一个值得学习的实际例子.
另一方面,也许我只是错过了一些明显和根本的东西.如果有人能指出我正确的方向,那将是伟大的.谢谢!:-)
(顺便说一下,我尝试通过电子邮件将这个问题发送到firebase-talk@googlegroups.com,如Firebase网站上所建议的那样......但根据谷歌发布的反弹消息,该组似乎不存在.)
稍微退一步,值得注意的是Firebase Simple Login是一个基于Firebase自定义登录的抽象设计,以方便使用.如果您愿意,您仍然可以使用自定义登录功能将您现有的身份验证用于Firebase.
Firebase简单登录使您无需仅运行服务器进行身份验证.但是,与PHP示例没有1对1并行,其中服务器将根据服务器上检测到的会话来管理请求访问,因为所有逻辑,模板等都存在于客户端代码中.
在大多数情况下,您的客户端逻辑,模板,资产等将是静态和公共的.您真正想要保护的是用户和应用程序数据,这就是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
,必须对用户进行身份验证并作为用户进行身份验证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 } });
希望有所帮助!