android - 如何访问医生和用户的 Firestore 集合我不知道他是用户还是医生
问题描述
我想在 Firestore 上存储医生和用户两个不同的集合我已经创建了不同的集合,一个是为用户创建的,另一个是为注册活动中的医生创建的。现在的问题是当有人想登录时我不知道他是用户或医生我需要在主要活动中调用集合我想显示用户或医生的所有详细信息如何确定我需要哪个集合例如,当医生想要登录时,我只知道他的电子邮件 ID,并且我想
在主要活动中显示他的所有详细信息我不知道我需要调用哪个集合,因为我不知道他是医生或用户
我创建了两个集合,因为我想向用户显示所有医生列表,向医生显示用户列表
我的应用程序详细信息我的第一个活动是登录活动,如果有人是新用户,他们现在可以注册让我们从注册活动开始 这是我的注册活动
FirebaseAuth.getInstance().createUserWithEmailAndPassword( binding.etEmail.text.toString().trim { it <= ' ' }, binding.etPassword.text.toString().trim { it <= ' ' })
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val firebaseUser: FirebaseUser = task.result!!.user!!
val user = User(
firebaseUser.uid,
binding.etFirstName.text.toString().trim{it<=' '},
binding.etLastName.text.toString().trim{it<=' '},
binding.etEmail.text.toString().trim { it <= ' ' },
)
if (binding.rbUser.isChecked){
// registerUser method create a user collection on firebase
FirestoreClass().registerUser(this,user)
}else{
// // registerDoctors method create a doctor collection on firebase
FirestoreClass().registerDoctors(this, user)
}
} else {
showErrorSnackBar(task.exception!!.message.toString(), true)
}
}
我想我不需要把 FirestoreClass().registerUser(this,user) 和 FirestoreClass().registerDoctors(this, user) 方法代码都可以正常工作,现在我有两个集合
现在有人想登录我不知道他/她是医生还是用户
// this is my login activity
val email = binding.etEmail.text.toString().trim{it <= ' '}
val password = binding.etPassword.text.toString().trim{it <= ' '}
FirebaseAuth.getInstance().signInWithEmailAndPassword(email,password)
.addOnCompleteListener {
task ->
if(task.isSuccessful){
// Now how can I identify This is A doctor or A user what should I put in if blocks please tell
if ( )
FirestoreClass().getDoctorDtails(this@LoginActivity)
else{
FirestoreClass().getUserDetails(this@LoginActivity)
}
}else{
// hideProgressDialog()
showErrorSnackBar(task.exception!!.message.toString(), true)
}
如果您对此有任何解决方案,请告诉我如何知道他/她是医生并且我是用户
解决方案
您可以使用Firebase 自定义声明。它们就像分配给用户的角色。您需要使用Firebase Admin SDK来分配自定义声明。现在,您将如何以及何时分配自定义声明完全取决于您的注册流程。
当您需要知道当前用户是医生还是普通用户时,您可以使用 Android (Kotlin) 中的以下代码进行操作:
user.getIdToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
@Override
public void onSuccess(GetTokenResult result) {
boolean isDoctor = result.getClaims().get("doctor");
if (isDoctor) {
// Show doctor UI.
} else {
// Show regular user UI.
}
}
});
然后您可以检查登录用户是否是医生,然后有条件地切换到相关活动。如果您在注册流程中需要帮助设置自定义声明,请告诉我。
推荐阅读
- c# - 在 Cofoundry 中使用 IDependableEntityDefinition 创建实体依赖项
- omnet++ - 在 Omnet++ 的 Qtenv 中过滤数据包
- apache-spark - pyspark 无法解析给定输入列的“col.name”:[col.name] - col 名称中的点
- javascript - 使侧边栏响应位置相对
- c# - 具有多个基本构造函数和事件的 F# 继承
- php - React 如何在发送 fetch 请求时避免错误?
- javascript - 排序数组 JavaScript
- assembly - 我如何编写一个在 NASM 16 位实模式下打印空终止字符串的函数?
- android - 是否可以避免崩溃 RemoteServiceException: Bad notification(...) on app update?
- material-ui - Material-ui XGrid 在向组件添加useApiRef时停止渲染