android 如何基于不同的凭据在同一应用程序上显示2个界面?

bvjveswy  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(219)

我正在Android Studio中制作一个应用程序,将由大学的教师和学生使用。
如何使教师和学生根据他们的凭据获得不同的界面?
我还没有尝试过任何东西,但我的想法是,它会读取用户名,然后重定向用户到各自的屏幕,因为凭据是不同的。

whlutmcx

whlutmcx1#

我的想法是,它将首先读取用户名,然后将用户重定向到各自的屏幕,因为凭据是不同的。
如果您想读取用户名,然后比较凭证,这意味着您必须将凭证存储在数据库中,这实际上不是一个好主意。在数据库中以纯文本形式存储密码等敏感数据非常重要。恶意用户可能会利用这一点。我建议您使用Firebase Authentication,然后立即使用Firestore Security Rules保护数据库。
因此,与其说是关于他们的凭据,不如说是关于用户类型。因此,我建议您使用Firestore数据库,其模式如下所示:

db
|
--- users (collection)
     |
     --- $uid (document)
     |     |
     |     --- name: "Saurabh Pathak"
     |     |
     |     --- type: "teacher"
     |
     --- $uid (document)
           |
           --- name: "Alex Mamo"
           |
           --- type: "student"

现在,假设您已经为每种类型的用户创建了两个Activity,TeacherActivityStudentActivity,以将每个用户重定向到其相应的Activity,那么请使用以下几行Java代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("users");
DatabaseReference uidRef = db.child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            DataSnapshot sanpshot = task.getResult();
            if(sanpshot.exists()) {
                String type = sanpshot.child("type").getValue(Long.class);
                if(type.equals("teacher")) {
                    startActivity(new Intent(getApplicationContext(), TeacherActivity.class));
                } else {
                    startActivity(new Intent(getApplicationContext(), StudentActivity.class));
                }
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

相关问题