[使用Firebase的Android应用中基于角色的身份验证

问题描述 投票:0回答:1

我正在开发一个android应用并使用firebase数据库。它包含授权和针对不同角色的少量活动。如果您输入的是“安装程序”,则打开一个活动,如果输入的是“ Contact-Centre”,则打开另一个活动,但现在并不重要。因此,我需要检查输入的电子邮件和密码对的作用。那我该怎么办?

这是我的数据库结构:

database structure

登录代码:

mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){
            Toast.makeText(MainActivity.this,"Аутентификация прошла успешно",Toast.LENGTH_SHORT).show();
            startActivity(new Intent(getApplicationContext(),RoleInstallerForm.class));
        }
        else {
            Toast.makeText(MainActivity.this,"Проверьте правильность введённых данных", Toast.LENGTH_SHORT).show();
                            ProgressBar.setVisibility(View.GONE);
        }
    }
});
android firebase firebase-security roles user-roles
1个回答
0
投票

将您的代码修改为此:

mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){
            Toast.makeText(MainActivity.this,"Àóòåíòèôèêàöèÿ ïðîøëà óñïåøíî",Toast.LENGTH_SHORT).show();

            try {
                currentUserUID = FirebaseAuth.getInstance().getCurrentUser().getUid();
            }catch (Throwable throwable){
                throwable.printStackTrace();
            }

            roleRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserUID).child("Role");
            roleRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    try {
                        String userRole = dataSnapshot.getValue().toString();
                        //Add if-else here if you need any
                        //For example:
                        //I DONT UNDERSTAND RUSSIAN ROLE YOU TYPE
                        // JUST REPLACE THE ROLE NAMES
                        if(userRole.equals(leader)){
                            startActivity(new Intent(MainActivity.this, some-activity.class));
                        }else{
                            startActivity(new Intent(MainActivity.this, other-activity.class));
                        }
                    }catch (Throwable e){
                        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                    }
                 }
                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {
                     Toast.makeText(getApplicationContext(), databaseError.toString(), Toast.LENGTH_SHORT).show();
                 }
             });   

         }
         else {
             Toast.makeText(MainActivity.this,"Ïðîâåðüòå ïðàâèëüíîñòü ââåä¸ííûõ äàííûõ", Toast.LENGTH_SHORT).show();
             ProgressBar.setVisibility(View.GONE);
         }
     }
 });
© www.soinside.com 2019 - 2024. All rights reserved.