Firebase 安全性和电话身份验证

Posted

技术标签:

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

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

【问题讨论】:

我的用户,即使是那些没有进行身份验证的用户,或者他们都进行了身份验证? 【参考方案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】:

    您已经实现了 Firebase 手机身份验证,下一步是为每个用户创建一个文档,通过使用每个用户身份验证附带的唯一 uid 字符串来存储您想要的信息。

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

【讨论】:

以上是关于Firebase 安全性和电话身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase电话身份验证验证失败

Flutter bloc 和 Firebase 电话身份验证

Firebase 电话身份验证失败

如何使用 javascript 从 Firebase 电话身份验证中删除验证码?

使用 Unity 进行 Firebase 电话身份验证

Firebase 电话身份验证未发送带有代码的短信