首页 > 解决方案 > 使用 Firebase 在我的 android 应用程序中验证两种类型的用户(学生和司机)的最佳方法是什么

问题描述

我正在为我的大学交通服务(公共汽车)开发一个 Android 应用程序。它可以让学生知道公交车在哪里使用地图。In 表示巴士在地图中的位置(谷歌地图)

我有两种类型的用户(学生、司机)

学生和司机应首先注册(这是通过使用电子邮件密码的 firebase 身份验证完成的)

但主要问题是,想象以下是学生的登录凭据;

**电子邮件:** jb@gmail.com

**密码:** 123456

学生可以使用这些凭据登录(注册后),并查看地图。

问题是,当我转到驱动程序的登录 UI 并输入相同的凭据时,它会登录驱动程序(应该登录学生)

我知道这很明显,因为它会查找任何已保存的电子邮件和匹配的密码并记录用户。

但我需要一种有效的方法来检查它是否真的是学生的登录凭据或司机的登录凭据。

有没有办法在firebase中向登录方法发送一个参数以及登录凭据(电子邮件和密码),这样我就可以为每个用户传递一个值。(假设我在学生注册时传递了一个字符串值“student”,在司机注册时传递了“driver”)

所以我可以检索传递的数据并检查这个凭证是学生的还是司机的

太感谢了!

标签: androidfirebase-authentication

解决方案


Firebase 身份验证在这些类型的用户之间没有区别。它所做的只是确定用户是否是他们声称的那个人。在用户通过身份验证后,您的应用程序必须对用户类型进行任何区分。

您通常会通过将每个用户的类型存储在数据库中来做到这一点,例如实时数据库或 Cloud Firestore。在那里,您将每个用户的 UID 与他们的类型相关联:

user_types:
  user1: "student"
  user2: "driver"
  user3: "student"
  user4: "student"

或者,您可以使用自定义声明将用户的类型存储在他们的用户配置文件中。使用 Admin SDK for Node.js 设置自定义声明:

admin.auth().setCustomUserClaims(uid, {user_type: "driver"}).then(() => {
  // The new custom claims will propagate to the user's ID token the
  // next time a new one is issued.
});

由于这是一项敏感操作,因此只能通过 Firebase Admin SDK 完成,您的应用程序中没有该 SDK,但只能在受信任的环境中使用,例如您的开发机器、您控制的服务器或 Cloud Functions .

另请参阅有关该主题的这些先前的问题:


推荐阅读