У меня есть приложение для входа и регистрации, которое выполняет 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();
}
});
}
});