繁体   English   中英

使用 firebase 验证用户验证

[英]validate user using firebase auth

我希望那些在用户应用程序中注册的用户不能登录到管理员或医生应用程序。
或者在医生应用程序中注册的医生无法登录用户或管理应用程序。
或者那些在管理应用程序中注册的管理员无法登录医生或用户应用程序。

数据库结构

我尝试进行用户验证的方法是

private void updateUI(final FirebaseUser user) {
    if (user!=null){

        final DatabaseReference adminsRef = FirebaseDatabase.getInstance().getReference().child("Admins").child(user.getUid());
        final DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(user.getUid());
        adminsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){

                    userRole = dataSnapshot.child("role").getValue(String.class);
                    if (user.equals("admin")){
                        FancyToast.makeText(getApplicationContext(),"User already registered as an Admin",FancyToast.LENGTH_LONG,FancyToast.INFO,false).show();
                        FirebaseAuth.getInstance().signOut();
                        if (AccessToken.getCurrentAccessToken() != null) {
                            LoginManager.getInstance().logOut();
                        }
                        startActivity(new Intent(MainActivity.this,MainActivity.class));
                        finish();
                    }
                    else {
                        FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference userRef = database.getReference("Doctors").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        map.put("email", FirebaseAuth.getInstance().getCurrentUser().getEmail());
                        map.put("name", FirebaseAuth.getInstance().getCurrentUser().getDisplayName());
                        map.put("profile_status","incomplete");
                        map.put("role","doctor");
                        //map.put("location", getIntent().getExtras().get("location").toString());
                        userRef.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    FancyToast.makeText(getApplicationContext(), "User details updated successfully", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                } else {
                                    FancyToast.makeText(getApplicationContext(), "User details update unsuccessful", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                }
                            }
                        });
                        Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                        startActivity(intent);
                        finish();
                    }

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
        usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    userRole = dataSnapshot.child("role").getValue(String.class);
                    if (userRole.equals("user")){
                        FancyToast.makeText(getApplicationContext(),"User already registered as a Customer",FancyToast.LENGTH_LONG,FancyToast.INFO,false).show();
                        FirebaseAuth.getInstance().signOut();
                        if (AccessToken.getCurrentAccessToken() != null) {
                            LoginManager.getInstance().logOut();
                        }
                        startActivity(new Intent(MainActivity.this,MainActivity.class));
                        finish();
                    }
                    else {
                        FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference userRef = database.getReference("Doctors").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        map.put("email", FirebaseAuth.getInstance().getCurrentUser().getEmail());
                        map.put("name", FirebaseAuth.getInstance().getCurrentUser().getDisplayName());
                        map.put("profile_status","incomplete");
                        map.put("role","doctor");
                        //map.put("location", getIntent().getExtras().get("location").toString());
                        userRef.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    FancyToast.makeText(getApplicationContext(), "User details updated successfully", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                } else {
                                    FancyToast.makeText(getApplicationContext(), "User details update unsuccessful", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                }
                            }
                        });
                        Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                        startActivity(intent);
                        finish();
                    }

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



    }

}

你正在做几乎需要做的事情。 只需使用数据快照检查用户 UID 是否存在于用户子节点或管理子节点中。

以下是获取用户角色的方法:

String userRole;

roleRef = FirebaseDatabase.getInstance().getReference().child("Users").child(firebaseAuth.getCurrentUser().getUid());
        roleRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                try {
                    userRole = dataSnapshot.child("role").getValue().toString();
                    userProf_username.setText(userNameInData);
                }catch (Throwable e){
                    Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                }

            }

现在用户的角色在字符串 userRole 中。 所以现在你可以检查用户是管理员还是普通客户端。

然后添加一个 if-else 块:

if(userRole.equals("admin")){
startActivity(new Intent(MainActivity.this, adminActivity.class);
}
else{
startActivity(new Intent(MainActivity.this, userActivity.class);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM