首页 > 解决方案 > Android Studio 中基于角色的自动登录

问题描述

我正在创建一个应用程序,其中有 5 个不同的用户可用,其中四个是工人,一个是客户。所有用户都可以使用他们的电子邮件和密码登录应用程序,但我希望这 5 个用户中的 4 个用户重定向到一个活动,剩下的一个用户重定向到另一个不同的活动,这工作正常,但在自动时间登录我希望同样的事情会发生,但是每当我以 WORKER 身份登录然后从内存中清除应用程序时,并且在自动登录时,客户端每次都会登录。

在注册时,每个用户都必须选择他们的名称,并且每次尝试让用户根据我用作用户类型的名称自动登录时,客户端名称都将保持为空。

在此处输入图像描述

我希望有时自动登录四个用户(工人)重定向到不同的一个活动,而作为客户端的一个用户重定向到另一个不同的活动。我必须为此使用什么,哪种方法对我更好?

标签: androidfirebase-realtime-database

解决方案


我有用户会话来保存当前登录用户类型,它工作得很好。

这是我的会话代码:-

private SharedPreferences prefs;
private static AppSession session;

public static AppSession getInstance(Context cntx) {
    if (session == null)
        session = new AppSession(cntx);
    return session;
}

public AppSession(Context cntx) {
    // TODO Auto-generated constructor stub
    prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
}


public void setHasLoging(boolean value) {
    prefs.edit().putBoolean("hasLoging", value).commit();
}

public void setUserHasLoging(boolean value){
    prefs.edit().putBoolean("UserHasLoging", value).commit();
}

public boolean getHasLoging() {
    return prefs.getBoolean("hasLoging", false);
}

public boolean getUserHasLoging(){
    return prefs.getBoolean("UserHasLoging", false);
}



public void clear() {

    prefs.edit().clear().commit();
}

登录活动代码:-

        userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(RegisteredUserID);

        userDatabaseReference.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                String userType = dataSnapshot.child("designation").getValue().toString();

                if (userType.equals("CA")){
                    mAppSession.setHasLoging(true);
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }

                else if (userType.equals("CLIENT")){
                    mAppSession.setUserHasLoging(true);
                    Intent intent = new Intent(LoginActivity.this, DashBoardActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }

                else if (userType.equals("ADVOCATE")){
                    mAppSession.setHasLoging(true);
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }

                else if (userType.equals("CMA")){
                    mAppSession.setHasLoging(true);
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }

                else if (userType.equals("CS")){
                    mAppSession.setHasLoging(true);
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }
            }

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

            }
        });

    } else {
        SweetToast.info(LoginActivity.this, "Email is not verified. Please verify first");
        mAuth.signOut();
    }
}













Here Splash Screen I used as Launcher Activity to check the condition which user is logged in.

AppSession mSession;
private FirebaseAuth mAuth;
private DatabaseReference mDatabaseReference;



@Override
protected void onStart() {
    super.onStart();

    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();

    if (user == null){

        Intent intent =  new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }

    else if (user != null){

        mDatabaseReference.child(user.getUid()).child("online").setValue(ServerValue.TIMESTAMP);
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    mSession = AppSession.getInstance(this);
    rightAction();




}

private void rightAction(){

    if (mSession.getHasLoging()) {
        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }

   else if (mSession.getUserHasLoging()){
        Intent intent1 = new Intent(SplashActivity.this, DashBoardActivity.class);
        startActivity(intent1);
        finish();

    }

推荐阅读