我正在Android Studio中制作一个应用程序,将由大学的教师和学生使用。如何使教师和学生根据他们的凭据获得不同的界面?我还没有尝试过任何东西,但我的想法是,它会读取用户名,然后重定向用户到各自的屏幕,因为凭据是不同的。
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,TeacherActivity和StudentActivity,以将每个用户重定向到其相应的Activity,那么请使用以下几行Java代码:
TeacherActivity
StudentActivity
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! } } });
1条答案
按热度按时间whlutmcx1#
我的想法是,它将首先读取用户名,然后将用户重定向到各自的屏幕,因为凭据是不同的。
如果您想读取用户名,然后比较凭证,这意味着您必须将凭证存储在数据库中,这实际上不是一个好主意。在数据库中以纯文本形式存储密码等敏感数据非常重要。恶意用户可能会利用这一点。我建议您使用Firebase Authentication,然后立即使用Firestore Security Rules保护数据库。
因此,与其说是关于他们的凭据,不如说是关于用户类型。因此,我建议您使用Firestore数据库,其模式如下所示:
现在,假设您已经为每种类型的用户创建了两个Activity,
TeacherActivity
和StudentActivity
,以将每个用户重定向到其相应的Activity,那么请使用以下几行Java代码: