【问题标题】:Firebase security and phone authenticationFirebase 安全性和电话身份验证
【发布时间】:2020-12-12 22:56:38
【问题描述】:

我是一名新的 android 开发人员,对 firebase 规则和电话身份验证感到困惑。 我正在为调度系统编写应用程序。 现在,我正在使用电话号码对用户进行身份验证。 在我的计划中,我想将约会保存在我的实时数据库 firebase 中,并为每个电话号码添加用户信息,例如姓名和他们的约会。 第一个问题是如何为每部手机创建一个用户?我可以通过电话身份验证来做到这一点,还是需要创建一个用户对象并将其保存在实时数据库中? 第二个问题是关于安全的。我希望我的用户能够查看所有免费约会并安排一个或多个。我需要为每个用户设置什么规则?

【问题讨论】:

  • 我的用户,即使是那些没有进行身份验证的用户,或者他们都进行了身份验证?

标签: java android firebase firebase-authentication firebase-security


【解决方案1】:

您可以通过电话号码 here 使用 Firebase 身份验证。一旦用户对自己进行身份验证,就会为该人创建一个唯一的 Uid,您可以使用它来使用 auth 变量获取用户数据。这是使用Firebaseuser 记录的here

如果您想为用户制作自定义字段,我建议您获取 Uid,然后使用 Uid 作为主键在 /Users 中创建用户数据库,这类似于 /Users/Uid

此外,如果您希望经过身份验证的用户只看到免费约会,您可以执行如下操作,假设根目录中的 Appointment 分支包含可用的空闲槽。

{
  "rules": {
    "Appointments": {
      "freeSlots": {
        ".read": "$uid === auth.uid"
      }
    }
  }
}

然后您可以通过您的代码操作数据库,可能将空闲槽从 Appointment 转移到 /User/Uid

如果你希望用户只看到他的槽,你可以写如下规则

{
  "rules": {
    "Users": {
      "$uid": {
        ".write": "$uid === auth.uid"
        ".read": "$uid === auth.uid"
      }
    }
  }
}

这里的$uid 确保用户只读取属于他们的数据。

您可以找到有关安全规则的更多帮助here

希望这对您有所帮助?

【讨论】:

  • 太棒了!很多。我现在还有一个问题:如果用户在注册之前尝试登录,我如何根据他的电话号码检查该用户是否经过身份验证?
  • 谢谢你。如果您认为答案对您有帮助,您能否将其标记为已接受。也请给我一点时间回复您的问题。我希望你在问之前做一些研究和谷歌搜索?
  • 是的,当然。我找到了这个,但我不明白我必须导入什么: UserRecord userRecord = FirebaseAuth.getInstance().getUserByPhoneNumber(phoneNumber);
  • 您可以从here 看到 UserRecord 类的所有数据。如您所见,您可以从 userRecord 变量中获取 uid
  • 但是在FirebaseAuth.getInstance下找不到getUserByPhoneNumber函数,不知道为什么。
【解决方案2】:
  1. 您已经实现了 Firebase 手机身份验证,下一步是为每个用户创建一个文档,通过使用每个用户身份验证附带的唯一 uid 字符串来存储您想要的信息。

  2. 为了增加谁读/写的安全性,你必须编写数据库规则Info here

【讨论】:

    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多