Files
cuidamais_med/docs/09_Autenticacao.md
2026-04-22 12:41:12 +01:00

3.2 KiB
Raw Blame History

🔐 Autenticação — Login e Registo

Pasta: app/src/main/java/com/example/medcuida/pro/ui/auth/


LoginActivity.java (154 linhas)

Layout: activity_login.xml

Descrição

Ecrã de entrada na aplicação. Permite login com email/password via Firebase Auth.

Inicialização (onCreate) — Linhas 3478

  1. Auto-login: Se já existe sessão ativa → redireciona direto para MainActivity
  2. Campos: email e password (TextInputEditText)
  3. Botão "Entrar"attemptLogin()
  4. Link "Registar" → abre RegisterActivity
  5. Link "Esqueci password":
    • Valida se o email foi preenchido
    • Envia email de recuperação via mAuth.sendPasswordResetEmail()

attemptLogin() — Linhas 8198

Validações antes de enviar ao Firebase:

  • Email não pode estar vazio
  • Password não pode estar vazia

loginUser() — Linhas 100123

mAuth.signInWithEmailAndPassword(email, password)
  1. Desativa o botão (evita duplo clique) e mostra "A entrar..."
  2. Se login OK → chama checkUserAccess()
  3. Se falhar → mostra mensagem de erro e reativa o botão

checkUserAccess() — Linhas 125152

Verifica se o utilizador tem perfil configurado (estratégia com fallback):

1º → Procura em 'medicos'     → Se existe → Entrar na app
2º → Procura em 'utilizadores' → Se existe → Entrar na app  
3º → Não encontrado            → Erro + signOut

Se não encontrar em nenhuma coleção → faz signOut() e pede para registar.


RegisterActivity.java (187 linhas)

Layout: activity_register_medico.xml

Descrição

Ecrã de registo de novos médicos. Cria conta no Firebase Auth e guarda dados no Firestore.

Campos do Formulário

Campo Tipo Obrigatório Validação
Nome completo TextInputEditText Não vazio
Especialidade TextInputEditText Não vazio
Género AutoCompleteTextView Não vazio
Email TextInputEditText Não vazio
Password TextInputEditText Mínimo 6 caracteres

attemptRegister() — Linhas 75118

Valida todos os campos sequencialmente. Se algum falhar, faz requestFocus() nesse campo.

registerUser() — Linhas 121155

mAuth.createUserWithEmailAndPassword(email, password)
  1. Desativa o botão de registo
  2. Se criar conta OK → chama saveMedicoData()
  3. Caso especial — email já existe:
    • Tenta fazer login com as credenciais fornecidas
    • Se login OK → grava os dados (pode ter falhado antes)
    • Se login falhar → mostra erro "email já registado"

saveMedicoData() — Linhas 157185

Grava os dados do médico em duas coleções para compatibilidade:

Map<String, Object> medicoMap = new HashMap<>();
medicoMap.put("id", uid);
medicoMap.put("nome_completo", name);
medicoMap.put("email", email);
medicoMap.put("especialidade", specialty);
medicoMap.put("sexo", gender);
medicoMap.put("tipo", "medico");
Coleção Documento
utilizadores/{uid} Dados principais
medicos/{uid} Cópia para compatibilidade

Após gravar com sucesso → redireciona para MainActivity.