Пользователь GetCurrent возвращает только зарегистрированного пользователя из приложения Google Firebase - PullRequest
0 голосов
/ 07 января 2020

У меня есть приложение для входа и регистрации, которое выполняет 2 шага

В одном упражнении он регистрирует пользователя, все правильно, когда я вхожу, я могу правильно перетащить пользователя в свой NavHeader, однако, когда мне нужно зарегистрировать нового пользователя, возникает большая проблема.

Я делаю все способы регистрации и даже вижу своего пользователя, зарегистрированного в консоли Firebase, однако, когда я пытаюсь вытащить этого пользователя с помощью user.getCurrentUser (); он возвращает мне пользователя LAST LOGIN в приложении, ie пользователь, который только что зарегистрировался, не возвращается как текущий.

Этот метод является ответом для обновления панели навигации с текущим пользователем:


    private void updateNavHeader() { // Funcao responsável por atualizar a navegação lateral de informações do usuario, tais como nome, foto e email
        // A funcao ainda não funciona corretamente, corrigir os métodos necessários para obtenção das informações
       NavigationView navigationView = findViewById(R.id.nav_view);
        View headerView = navigationView.getHeaderView(0);
        TextView barNomeUser = (TextView) headerView.findViewById(R.id.textViewNome);
        TextView barEmailUser = (TextView) headerView.findViewById(R.id.textViewEmail);
        TelaCadastroInicio telaCadastroInicio = new TelaCadastroInicio();
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

            if(user != null) {
                barNomeUser.setText(user.getDisplayName());
                barEmailUser.setText(user.getEmail());
            } else {
                barEmailUser.setText("Usuario nao logado");
            }

    }

Этот метод регистрирует пользователя в моем приложении (первый раз)


    private void cadastroUser(){ // Função responsável por coletar as informações dadas pelo usuario
        String emailUser1; // String interna para o email do usuario
        String passwordUser; // tring interna para a senha do usuario
        String nameUser = barNomeUser.getText().toString(); // Converte o nome do usuario para caixa de texto simples e atribui a String
        emailUser1 = barEmailUser.getText().toString(); // Converte o email pra caixa de texto idem
        passwordUser = barPasswordUser.getText().toString(); // Idem aos processos anteriores
        if(passwordUser == null || passwordUser.isEmpty() || emailUser1 == null || emailUser1.isEmpty() || nameUser == null || nameUser.isEmpty()){ // Verificação se os campos estiverem vazios
            Toast.makeText(this, "Campos não preenchido corretamente", Toast.LENGTH_SHORT).show(); // Erro exibido ao usuario no caso de não preencher os campos
        }
        FirebaseAuth.getInstance().createUserWithEmailAndPassword(emailUser1, passwordUser) // Caso usuario preencha, criamos esse usuario no servirdor de autenticacao do Firebase
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() { // Se a criação no servidor do Firebase for um sucesso, prosseguimos com os métodos abaixo
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful())
                        Log.i("Sucesso!", task.getResult().getUser().getUid());
                        saveUserInFirebase(); //Salva o usuario no banco de dados
                    }
                })
                .addOnFailureListener(new OnFailureListener() { // Se o cadastro falhar, entramos em uma exceção no aplicativo e coletamos o erro
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.i("Erro interno", e.getMessage());
                    }
                });

    }

Этот метод является пользователем для входа в мое приложение


                FirebaseAuth.getInstance().signInWithEmailAndPassword(email, passwordUser).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) { // Caso não entre nos casos acima, tenta logar com o email e senha
// inserido pelo usuario nos campos, se o servirdor receber corretamente tudo abaixo daqui dá certo
                        Log.i("Login Completo", task.getResult().getUser().getUid()); // Notifica que deu certo
                        Intent intent = new Intent(TelaLoginInicio.this, MenuDeslizanteDaTela.class); //Muda para outra tela
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) { //Se der qualquer erro no Login, como credenciais não conferirem com nenhum cadastro existente no nosso banco de dados.
                        Log.i("Erro no processo", e.getMessage()); //Avisa no log sobre o errro do processo
                        Toast.makeText(TelaLoginInicio.this, "Email ou senha incorreto, tente novamente", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Я был не прав, метод регистрации пользователя занимает около 4 секунд (в моем приложении), чтобы отправить пользователя на сервер firebase, и я вызвал активность (nav_header) сразу после вызова метода, поэтому:

зарегистрировать пользователя (); Intent int = new Intent .... // И здесь я вызвал следующее намерение, однако метод registerUser () еще не был завершен, поэтому я добавил Intent к новому действию ТОЛЬКО, когда task.isSuccessful был TRUE, что он работал на меня.

0 голосов
/ 07 января 2020

Нет такого метода, который может дать вам всех зарегистрированных пользователей из FirebaseAuth. Одним из способов добиться этого является сохранение идентификатора электронной почты пользователя в базе данных Firebase при регистрации. А в случае новой регистрации просто проверьте, существует ли идентификатор электронной почты в базе данных или нет.

...