Skip to main content

Login por QR-code

Tela alternativa de login: em vez de digitar e-mail e senha, a pessoa escaneia um QR-code com o aplicativo móvel do Mobilemed (já autenticado nele) para entrar na versão web.

Tela pedindo para escanear o código QR com o aplicativo, com o QR-code exibido e o botão Voltar para o Login

Antes de começar​

  • Rota: /:tenant/authorization/qr.
  • Componente: QrcodeLoginComponent (@pages/authentication/qrcode-login).
  • É preciso ter o aplicativo móvel do Mobilemed instalado e já logado nele — quem aprova o QR-code é o app, não a web.

Permissões e acesso​

Pública na web — qualquer pessoa não autenticada pode abrir a tela e ver o QR-code (o desafio de QR-code em si é público para ser iniciado). A aprovação, feita no aplicativo, exige que o app já tenha uma sessão mobile ativa.

Caminho principal​

  1. A pessoa clica em Entrar com QRCode na tela de Login, ou acessa a rota diretamente.
  2. A tela pede um novo desafio de QR-code à API e desenha a imagem do QR assim que a resposta chega.
  3. A pessoa abre o aplicativo móvel (já logado) e escaneia o QR-code.
  4. Enquanto isso, a tela web consulta a API em segundo plano (a cada 750 ms) perguntando se o desafio já foi aprovado.
  5. Quando o aplicativo aprova o desafio, a sessão web é criada automaticamente e a pessoa é levada para a área logada — sem precisar clicar em nada na web.

Este levantamento confirmou apenas a geração real do QR-code (chamada real à API, imagem desenhada na tela). Concluir o login exige um segundo dispositivo com o aplicativo móvel autenticado, o que está fora do escopo deste levantamento (cobre só o frontend web). A confirmar — responsável: time de frontend/mobile; data: 24/09/2026.: captura do fluxo completo (aprovação pelo app) e do estado de erro (hasError, com o botão Tentar novamente).

Estados e mensagens​

EstadoQuando aparecePrint
QR-code exibidoDesafio criado com sucessoQR-code desenhado na tela, pronto para ser escaneado
AguardandoEntre a criação do desafio e o QR-code aparecerTexto "Aguardando redirecionamento..." (não capturado isoladamente — a transição é rápida)
Erro / QR-code indisponívelFalha ao iniciar o desafio, ou ele expira sem ser aprovadoMensagem de erro + botão Tentar novamente (não reproduzido nesta rodada)

Validações e falhas de backend​

SituaçãoOnde é validadaComportamentoComo se recupera
Client OAuth inválido, redirect_uri ou escopo não permitidosPOST /sessions/qr-challenges400 IDENTITY_QR_CHALLENGE_UNAVAILABLEA tela mostra o estado de erro com o botão Tentar novamente
Desafio expirado, ainda pendente, ou já usado ao concluirPOST /sessions/qr-challenges/complete (chamado em polling)400 — tratado pela tela como "ainda pendente" e repetido automaticamenteNenhuma ação da pessoa; só se aplica erro real quando o desafio expira de vez

Regras de negócio​

IDRegraO que a tela reflete
RN-01O desafio de QR-code nunca expõe tokens de sessãoO QR-code carrega só um token opaco de posse; quem materializa a sessão web é o app, ao aprovar
RN-02Quem cria a sessão de navegador é o aplicativo aprovadorA sessão web nasce com o IP/user-agent do desafio, não do aplicativo
RN-03Conclusão é de uso únicoDepois de concluído, o mesmo desafio não pode ser usado de novo (fica consumed)

Informações técnicas​

Rota da tela: /:tenant/authorization/qr · Acesso: Público (criação e consulta do desafio); a aprovação exige sessão mobile ativa no app

Rotas de API consumidas:

MétodoRotaQuando é chamada
POST/v1/sessions/qr-challengesAo abrir a tela (gera o desafio)
POST/v1/sessions/qr-challenges/completeEm polling, a cada 750 ms, até ser aprovado

→ Detalhe da rota: Login por QR-code — API

Relacionado​