Firebase身份验证取决于自定义用户类型

时间:2017-01-09 14:48:06

标签: android firebase firebase-authentication

我是Android和Firebase的新手,我正在尝试构建一个带有登录界面的应用程序。一旦用户登录,该应用程序将根据用户用户类型将他/她引导到特定屏幕。我将有3种用户类型:AdminDriverBus dispatcher

您对如何使其工作有任何想法吗? 我正在创建一个我真正需要帮助的Capstone项目。

直到现在我才编码。

期待您的想法和建议,谢谢。

2 个答案:

答案 0 :(得分:1)

让您的用户在注册时选择他们想要的用户类型。将该值写入Firebase数据库中该用户的对象。例如:

$UniqueUID:
    name: "John Doe"
    userType: "Driver"

当用户登录时,在您的MainActivity中,检查已登录的用户类型。例如:

if(userType.equals("Driver")){
    //Load the Driver screen
}

现在显然上面的例子很粗糙。您需要为具有特定用户数据的子项设置一个侦听器,并从中检索DataSnapshot。然后你可以比较它并执行必要的代码。

答案 1 :(得分:0)

假设你有一个类似于此的firebase结构:

  • 用户
  • -userUID
  • - 属性...
  • - 型

这意味着您将拥有一个适当的User.java模型,该模型反映了来自firebase的那些属性。

然后你需要在firebase中创建用户,这非常简单。

一旦您的用户在firebase中,您可以使用类似的内容来启动相应的活动(大部分内容直接来自firebase文档)(https://firebase.google.com/docs/auth/android/google-signin

public static final int ADMIN = 101;
public static final int DRIVER = 102;
public static final int BUS_DISPATCHER= 103;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
            if (user != null) { // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + firebaseUser.getUid());
                FirebaseDatabase.getInstance().getReference().child("users").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            User user = dataSnapshot.getValue(User.class);
                            int type = user.getType();
                            switch (type) {
                                case DRIVER:
                                    launchDriverScreen();
                                    break;
                                case ADMIN:
                                    launchAdminScreen();
                                    break;
                                case BUS_DISPATCHER():
                                    launchBusDispatcherScreen();
                                    break;
                                default:
                                    Log.e(TAG, "unknown user type: " + type);
                                    break;
                            }
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

            } else { // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
        }
    };
}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}