如何使用同一登录页面处理两个不同用户的登录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用同一登录页面处理两个不同用户的登录相关的知识,希望对你有一定的参考价值。

我正在创建一个有两个用户(医生和患者)的android应用。我为两个用户拥有不同的注册页面,但具有相同的登录页面。我试图通过使用Firebase Firestore来设置两个用户的登录名不同。我在Firestore数据库中设置了两个用户的电子邮件地址。在登录活动中,我获取了电子邮件地址,并均衡了从数据库中获取的登录页面和电子邮件的电子邮件,并将其设置为其他条件。我没有遇到什么问题。

还想知道我的逻辑是否正确?

这是我的登录活动。

 public class MainActivity extends AppCompatActivity 
        EditText editText_email, editText_password;
        Button signInButton, doctorSignUpButton, patientSignUpButton;
        FirebaseFirestore firestore;
        FirebaseAuth auth;
        String doctorEmail, patientEmail;

        @Override
        protected void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            firestore = FirebaseFirestore.getInstance();
            FirebaseApp.initializeApp(this);
            auth = FirebaseAuth.getInstance();

            editText_email = findViewById(R.id.editText_email);
            editText_password = findViewById(R.id.editText_password);
            signInButton = findViewById(R.id.signIn_button);
            doctorSignUpButton = findViewById(R.id.doctorSignUpButton);
            patientSignUpButton = findViewById(R.id.patientSignUpButton);



            doctorSignUpButton.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    Intent intent = new Intent(MainActivity.this, DoctorSignUp.class);
                    startActivity(intent);
                
            );

            patientSignUpButton.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    Intent intent = new Intent(MainActivity.this, PatientSignUp.class);
                    startActivity(intent);

                
            );



            firestore.collection("Doctor Database").get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() 
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) 
                            for (DocumentSnapshot documentSnapshot : task.getResult())
                                doctorEmail = documentSnapshot.getString("Email");

                            

                        
                    );

            firestore.collection("Patient Database").get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() 
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) 
                            for (DocumentSnapshot documentSnapshot : task.getResult())
                                patientEmail = documentSnapshot.getString("Email");

                            

                        
                    );

            signInButton.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    String email = editText_email.getText().toString();
                    String password = editText_password.getText().toString();

                    if (email == doctorEmail)
                        auth.signInWithEmailAndPassword(email, password)
                                .addOnCompleteListener(new OnCompleteListener<AuthResult>() 
                                    @Override
                                    public void onComplete(@NonNull Task<AuthResult> task) 
                                        if (task.isSuccessful() && auth.getCurrentUser() != null)
                                            Toast.makeText(MainActivity.this, "Logged In Successfully!", Toast.LENGTH_LONG).show();
                                            Intent intent = new Intent(MainActivity.this, DoctorSignUp.class);
                                            startActivity(intent);

                                        

                                    
                                ).addOnFailureListener(new OnFailureListener() 
                            @Override
                            public void onFailure(@NonNull Exception e) 
                                Toast.makeText(MainActivity.this, "Error Logging in with Doctor Account!", Toast.LENGTH_LONG).show();


                            
                        );

                    

                    else if (email == patientEmail)
                        auth.signInWithEmailAndPassword(email, password)
                                .addOnCompleteListener(new OnCompleteListener<AuthResult>() 
                                    @Override
                                    public void onComplete(@NonNull Task<AuthResult> task) 
                                        if (task.isSuccessful() && auth.getCurrentUser() != null)
                                            Toast.makeText(MainActivity.this, "Logged In Successfully!", Toast.LENGTH_LONG).show();
                                            Intent intent = new Intent(MainActivity.this, PatientSignUp.class);
                                            startActivity(intent);

                                        

                                    
                                ).addOnFailureListener(new OnFailureListener() 
                            @Override
                            public void onFailure(@NonNull Exception e) 
                                Toast.makeText(MainActivity.this, "Error Logging in with Patient Account!", Toast.LENGTH_LONG).show();


                            
                        );
                    
                
            );
        
    
答案

[如果某人使用相同的电子邮件并注册了两个帐户,一个代表A医生,一个代表患者,该怎么办?如果您在注册时关闭此链接,检查在患者和医生数据库中之前是否签署过电子邮件,以及是否已签署,则您的逻辑是正确的,则表示您不接受。

以上是关于如何使用同一登录页面处理两个不同用户的登录的主要内容,如果未能解决你的问题,请参考以下文章

如果应用程序有多个登录页面,如何使用安全模块(播放框架)

配置Spring Security以使用两个不同的登录页面

如何使用模板在 WooCommerce 的两个不同页面上显示登录和注册表单

如何使用 PHP 将登录表单错误返回到同一页面?

如何阻止用户从同一帐户但不同的选项卡登录两次

从同一登录页面使用其用户角色将用户重定向到仪表板