android - 具有不同用户类型的 Firebase Auth

标签 android firebase-authentication

我正在做一些事情,我有两个应用程序 - 一个用于“请求者”用户,一个用于“响应者”用户,我目前正在使用 Firebase 进行身份验证。用户使用电子邮件/密码组合登录,这是问题的根源:

问题在于用户冲突——因为 auth 模块连接到 Firebase 控制台中的单个项目,响应者可以在技术上登录请求者应用程序,反之亦然,这会导致问题,因为后端conks out - API 不允许他们访问,因为数据库在表中找不到他们的数据,并且应用程序行为不稳定(阅读:崩溃)。

我知道有类似的问题 ( Android - Firebase - Different types of Users Login ),但我真正想问的是,是否可以通过某种方式避免这种令人讨厌的情况。我想到的一些选项是:

  1. 在数据库中进行手动检查,如果用户类型不正确,则将用户注销 - 可以完成,但很乏味,而且会耗费数据/时间。
  2. 在 Firebase 中为每种用户类型创建不同的项目 - 这是低效的 - 当我使用 Firebase 进行身份验证时,我使用 Mongo 进行存储,所以这并不重要,但是如果/当我切换到 Firebase 进行存储时,那么我的服务器代码将变得复杂、缓慢和困惑,因为必须分别访问不同的数据库来访问请求者和响应者数据
  3. 推出我自己的身份验证 - 感觉像是个坏主意,但它有助于解决眼前的问题,同时打开另一个蠕虫 jar 头,因为我还需要在线实现 Firebase 云消息传递
  4. 切换到另一个身份验证提供商 - 我愿意接受这里的建议

我还预料到响应者可以创建一个帐户并使用请求者应用程序的情况,在这种情况下会发生冲突并且需要解决 - 我可以禁止响应者使用相同的电子邮件 ID 作为请求者,但这可能无法满足用户可能(并且将会)希望对所有内容使用一个电子邮件 ID 的真实场景。

任何人都可以帮助我采取正确的方法和/或解决这个问题的任何提示/解决方案吗?

----- 2017 年 12 月 14 日编辑--------

我还在同一个项目下列出了两个应用程序(附有屏幕截图),所以我的下一个问题是,当请求者用户尝试登录/注册为响应者时是否会发生冲突,反之亦然?

Screenshot of two apps in one Firebase Project

最佳答案

考虑使用自定义用户声明并通过数据库规则强制访问,或者如果您使用自己的端点,则通过解析 ID token 并检查其声明。 Firebase admin SDK 提供了执行此操作的工具:https://firebase.google.com/docs/auth/admin/custom-claims

Firebase Auth 团队也在努力向客户端公开这些声明,以简化那里所需的 UI 更改。

关于android - 具有不同用户类型的 Firebase Auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801936/

相关文章:

android - 为什么在调用 sendEmailVerification() 方法(Firebase Auth 的方法)时对象没有插入到 firebase 数据库中?

firebase - 有没有办法使用 "emailVerified"auth REST API'' 从我的 firebase auth 用户获取 ''?

java - StackOverflowError 之前执行了多少次迭代

java - 处理程序在可运行任务中循环处理时卡住 UI [android]

Android 和 Fabric (Crashlytics) 插件总是生成一个 UUID (Gradle Kotlin DSL)

javascript - 无法加载 currentUser

java - android - 为什么当前时间小于日历中的回溯日期时间

android - 更改模拟器主题?

android - 我们什么时候应该将 FirebaseUser.getToken(Boolean forcerefresh) 设置为 true?

android - 云 Firestore : Missing or insufficient permissions