customer, ops, driver, bko).
Cadastro de passageiro (sign-up)
Cadastro autônomo de passageiro, disponível apenas no projetocustomer. Ao concluir, o passageiro tem conta ativa, perfil de Customer com document e endereço, identidade de billing vinculada e já recebe um par de tokens.
Login por username + senha (sign-in)
Login tradicional. Ousername aceita email ou telefone. Disponível em todos os projetos.
Nos projetos
ops, driver e bko, o login exige a permissão de acesso correspondente (access:ops, access:driver, access:bko), derivada dos vínculos ativos do usuário. O projeto customer não exige permissão de acesso.Login social (Google OAuth)
Login via provedor social. O cliente obtém um token do provedor e o envia à API. Comportamento:- O usuário é localizado por
googleProviderId; se não houver, tenta poremaile, ao encontrar, vincula ogoogleProviderIde marca o email como verificado. - Se nenhum usuário existir, a requisição é rejeitada com
401— o login social não cria contas automaticamente. - No projeto
customer, o login social garante que exista umCustomerpara o usuário. Nos projetos de staff, valida a permissão de acesso (access:{api}).
Ativação de conta por Invite
Usuários criados sem senha, comstatus = PENDING, recebem um Invite type=ACCOUNT_ACTIVATION. Para acessar o sistema de forma autônoma, aceitam o token e definem uma senha.
Regras:
- O Invite de ativação expira em 7 dias; após o vencimento, um novo token deve ser gerado.
- A ativação define a senha, marca a conta como
ACTIVEe marca o email como verificado (quando há email). - Um token já utilizado não pode ativar a conta novamente.
Conta criada em venda POS
Quando uma venda presencial precisa criar uma conta para o passageiro, o sistema resolve ou criaUser e Customer antes do pedido. O documento do Customer é obrigatório nesse fluxo.
Se o User nascer sem senha, o sistema cria um Invite type=ACCOUNT_ACTIVATION. O passageiro usa esse convite depois para definir senha e acessar o app.
Recuperação de senha
A recuperação de senha usa OTP: o cliente solicita um código, recebe umotpId, e o fluxo de reset valida otpId + code antes de definir a nova senha.