Логин пользователя в Firebase - PullRequest
0 голосов
/ 11 ноября 2018

Я создал с помощью Firebase два варианта регистрации: один можно зарегистрировать как работодателя, а другой - как работника. Я дал им удостоверение личности, и каждый работодатель получил букву «е» в начале удостоверения личности, а работник получил букву «w» в начале удостоверения личности, чтобы я мог их идентифицировать.

Я также создал возможность соединения с Firebase, и я хочу, чтобы, если я подключался как работник, я переключался на определенный экран, а если я подключался как работодатель, я переключался на другой экран.

Я храню информацию в Firestore. Каждый документ в коллекции получает UID этого пользователя в документе. Идентификатор найден с буквами.

Я пробую это.

private char s = 'e';
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {

        if(task.isSuccessful())
        {

            mDatabase.collection("employer").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if (task.isSuccessful())
                    {
                        DocumentSnapshot documentSnapshot = task.getResult();
                        index = documentSnapshot.getString("ID");
                        ID = index.charAt(0);
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    mDatabase.collection("worker").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                            DocumentSnapshot documentSnapshot = task.getResult();
                            index = documentSnapshot.getString("ID");
                            ID = index.charAt(0);
                        }
                    });
                }
            });

            if(mUser.isEmailVerified())
            {

                if(ID == s)
                {
                    Intent k = new Intent(login_page.this,home_screen_employer.class);
                    startActivity(k);
                }
                else {
                    Intent k = new Intent(login_page.this,home_screen_worker.class);
                    startActivity(k);
                }
        }

1 Ответ

0 голосов
/ 11 ноября 2018

Данные загружаются из Firestore асинхронно.К моменту запуска if(ID == s) данные еще не загружены.

Вам потребуется вызвать код, который перенаправляет (создает намерение и запускает действие) внутри onComplete методов.

Итак, сначала определите функцию:

public void redirect(User user, char id) {
    if(user.isEmailVerified()) {
        if (id == 'e') {
            Intent k = new Intent(login_page.this,home_screen_employer.class);
            startActivity(k);
        }
        else {
            Intent k = new Intent(login_page.this,home_screen_worker.class);
            startActivity(k);
        }
    }
}

А затем вызовите ее из двух onComplete методов:

mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
  @Override
  public void onComplete(@NonNull Task<AuthResult> task) {
    if(task.isSuccessful()) {
      mDatabase.collection("employer").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful())
                {
                    DocumentSnapshot documentSnapshot = task.getResult();
                    index = documentSnapshot.getString("ID");
                    redirect(mUser, index.charAt(0));
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                mDatabase.collection("worker").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        DocumentSnapshot documentSnapshot = task.getResult();
                        index = documentSnapshot.getString("ID");
                        redirect(mUser, index.charAt(0));
                    }
                });
            }
        });

Рефакторинг этого немного для использования успешных слушателей приводит к:

mAuth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
  @Override
  public void onSuccess(AuthResult authResult) {
  mDatabase.collection("employer").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot doc) {
            index = doc.getString("ID");
            redirect(mUser, index.charAt(0));
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            mDatabase.collection("worker").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot doc) {
                    index = doc.getString("ID");
                    redirect(mUser, index.charAt(0));
                }
            });
        }
    });

И затем рефакторингу, чтобы избавиться от дублированного разбора документа:

mAuth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
  @Override
  public void onSuccess(AuthResult authResult) {
  mDatabase.collection("employer").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot doc) {
            redirect(mUser, doc);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            mDatabase.collection("worker").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot doc) {
                    redirect(mUser, doc);
                }
            });
        }
    });

С этим обновленным определением redirect функция:

public void redirect(User user, Document doc) {
    if(user.isEmailVerified()) {
        char id = doc.getString("ID").charAt(0);
        if (id == 'e') {
            Intent k = new Intent(login_page.this,home_screen_employer.class);
            startActivity(k);
        }
        else {
            Intent k = new Intent(login_page.this,home_screen_worker.class);
            startActivity(k);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...