首页 > 解决方案 > 如何访问医生和用户的 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) 方法代码都可以正常工作,现在我有两个集合

这是我的 Firestore 收藏截图

现在有人想登录我不知道他/她是医生还是用户

这是我的登录活动布局

         // 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)

                    }

如果您对此有任何解决方案,请告诉我如何知道他/她是医生并且我是用户

标签: androidfirebasegoogle-cloud-firestore

解决方案


您可以使用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.
    }
  }
});

然后您可以检查登录用户是否是医生,然后有条件地切换到相关活动。如果您在注册流程中需要帮助设置自定义声明,请告诉我。


推荐阅读