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

 sdfa2255204 发布于 2023-02-07 14:56

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

在过去,我可以在几分钟内用PHP设置它.但是对于Firebase来说,这已经成为一场我似乎无法获胜的战斗.

使用Firebase网站上的轻量文档,我终于能够成功注册并验证用户身份.大.

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

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

我查看了Firebase的文档.它缺乏实用的身份验证示例.它一直把我作为样本引用我的Firefeed应用程序.我看过Firefeed的代码,认证系统似乎1)对于登录系统来说过于复杂,2)过于错综复杂地与新闻提要相关联,这是一个值得学习的实际例子.

另一方面,也许我只是错过了一些明显和根本的东西.如果有人能指出我正确的方向,那将是伟大的.谢谢!:-)

(顺便说一下,我尝试通过电子邮件将这个问题发送到firebase-talk@googlegroups.com,如Firebase网站上所建议的那样......但根据谷歌发布的反弹消息,该组似乎不存在.)

1 个回答
  • 稍微退一步,值得注意的是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
      }
    });
    

    希望有所帮助!

    2023-02-07 14:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有