我在Android Studio中创建了一个应用程序,并将其与Firebase实时数据库相关联 . 我需要执行3次验证:
1.用户进入他的电话号码 . 和没有 . 根据我的数据库检查,如果它存在,那么,
-
由Firebase的通知服务生成的OTP和电话已验证 .
-
在下一个屏幕上,根据我的数据库检查用户的引脚,最后他进入菜单屏幕 .
现在,我对我应该设置什么作为我的安全规则感到困惑,因为身份验证正在第2步进行,所以我不能使用'auth'来规定规则而没有'auth'数据库将是公共的(至于我知道,如果我错了,请纠正我,这不安全 . 可以做些什么?
1 回答
实际上,正如您所提到的,在步骤1中没有身份验证 . 因此,如果您想“直接”读取实时数据库以检查电话号码是否存在,则无法避免每个人都有权访问列出所有电话号码的实时数据库节点 .
另一种选择是使用将通过HTTPS(作为REST API)调用的 Cloud 功能,并检查给定的电话号码是否在授权电话号码列表中 .
通过这种方式,您可以将一些限制性读取访问规则应用于电话号码列表,因为Clouds功能将以管理员身份访问它 . 而不是公开所有电话号码列表,您只允许检查一个电话号码是否被授权 .
查看文档以了解如何创建可通过HTTP请求触发的函数https://firebase.google.com/docs/functions/http-events
基本上你会做类似的事情:
所以:
1 /您通过Android应用程序(通过HTTPS)调用此功能,电话号码位于功能URL的QueryString中
2 / Cloud 功能检查电话号码是否存在 . 如果是这样,它可以发回成功消息(或写入RT DB的其他节点) . 如果不是,则发回失败消息 .
3 /在Android应用程序中,从 Cloud 功能接收响应后继续(或不)继续下一步
另外,看一下函数样本,特别是HTTP样本,例如:
https://github.com/firebase/functions-samples/blob/master/quickstarts/time-server/functions/index.js