Skip to content

feat(auth): adicionar login social com Google - #585

Open
RafaelFantinel wants to merge 13 commits into
developfrom
feat/google-social-login-v2
Open

feat(auth): adicionar login social com Google#585
RafaelFantinel wants to merge 13 commits into
developfrom
feat/google-social-login-v2

Conversation

@RafaelFantinel

@RafaelFantinel RafaelFantinel commented May 3, 2026

Copy link
Copy Markdown
Contributor

O que foi feito

Autenticação

  • Botão "Entrar com Google" na tela de login e "Cadastrar com Google" na tela de registro
  • Página /auth/callback que recebe o token vindo do redirect OAuth, salva na store e redireciona para o dashboard

Onboarding para novos usuários Google

  • Página /onboarding exibida quando o usuário autenticou pelo Google mas ainda não tem perfil completo
  • Formulário com os campos obrigatórios: telefone, gênero, data de nascimento, estado, cidade e aceite LGPD
  • Ao concluir, o backend emite um novo JWT com profileComplete: true e o usuário é direcionado ao dashboard

Proteção de rotas

  • OnboardingGate: bloqueia o acesso ao dashboard enquanto profileComplete for false, redirecionando para /onboarding
  • OnboardingRoute: protege a própria rota /onboarding — só entra quem tem token válido com profileComplete === false, impedindo acesso direto por URL

Store e decodificação

  • Campo profileComplete adicionado à store de autenticação e extraído do JWT no decode
  • Null guards no decoderUser para birthday, state e roles — campos que usuários Google não têm preenchidos inicialmente

Fluxos

Novo usuário Google

  1. Clica em "Entrar com Google" → OAuth do Google
  2. API redireciona para /onboarding?token=...
  3. Usuário preenche os dados obrigatórios
  4. Ao salvar, novo JWT com profileComplete: true → dashboard

Usuário com conta existente (auto-link)

  1. Clica em "Entrar com Google" com email já cadastrado por senha
  2. API linka o googleId à conta, confirma email pendente se houver
  3. Redireciona direto para /auth/callback?token=... → dashboard, sem onboarding

Implementa OAuth 2.0 com Google no cliente: fluxo de callback para usuários existentes, tela de onboarding para usuários novos com preenchimento de perfil obrigatório, gate de navegação bloqueando acesso ao dashboard enquanto perfil incompleto, e botões de login/cadastro com Google nas páginas de login e registro.

@FernandoAlmeidaPinto FernandoAlmeidaPinto left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review — Login Social com Google (frontend)

Review automatizado focado nos arquivos alterados pela branch feat/google-social-login-v2.

Resumo: 3 altos · 6 médios · 3 baixos

Sev Quantidade Comportamento
Alto 3 recomendado tratar antes do merge
Médio 6 revisar caso a caso
Baixo 3 nitpick / cleanup

Ver comentários inline. Pontos sistêmicos sem linha específica:

[MÉDIA] Estilo Tailwind hardcoded vs design system

Botões Google usam border-gray-300, text-gray-500, text-gray-700. Projeto tem MUI + tokens. Verificar consistência com outros botões de auth ou usar componente Button existente.

[BAIXA] Naming inconsistente

Função googleAuth (em services/auth/googleAuth.ts) vs constante de URL authGoogle (em services/urls.ts). Padronizar (ex: googleAuthUrl pra URL).


Review baseado em origin/develop...HEAD apenas.

Comment thread src/services/auth/googleAuth.ts Outdated
Comment thread src/services/auth/completeProfile.ts Outdated
Comment thread src/utils/decodedUser.ts Outdated
Comment thread src/pages/authCallback/index.tsx Outdated
Comment thread src/pages/authCallback/index.tsx
Comment thread src/routes/OnboardingRoute.tsx
Comment thread src/store/auth/index.ts Outdated
Comment thread src/pages/onboarding/index.tsx Outdated
Comment thread src/services/auth/googleAuth.ts Outdated
Comment thread src/routes/path.ts
RafaelFantinel and others added 12 commits May 12, 2026 20:23
getMonth() é 0-indexed; o branch do else omitia o +1, fazendo outubro
renderizar como "9" ao invés de "10" (e assim por diante).
Garante retry automático, reporte de erros de rede e normalização de
erros consistente com o restante do projeto. O token ainda é passado
manualmente no header pois neste fluxo ele vem da URL, não do cookie.
Usa a constante existente em vez de string literal. Adiciona comentário
eslint-disable para react-hooks/exhaustive-deps no useEffect intencional.
…uthButton

SVG e estilos estavam duplicados em loginForm e register. O novo
componente aceita a prop label para alternar entre "Entrar" e "Cadastrar".
Remove eslint-disable global, adiciona genérico useForm<OnboardingFormData>,
elimina cast 'as any' no handleSubmit e tipifica os handlers de onChange.
Evita quebrar callers existentes que constroem AuthProps sem o campo.
undefined é tratado como null (não redireciona para onboarding) em OnboardingGate.
Substitui catch silencioso por toast.error para que o usuário saiba
que precisa tentar o login novamente.
…l protected routes

- Move Google button below "Esqueci minha senha"/"Não possuo cadastro" links
  in all three login contexts (login page, partner prep, confirm enrolled)
- Extend OnboardingGate to cover SIMULADO_RESPONDER and SUPORTE routes
- Simplify Onboarding page: remove redundant doAuth (OnboardingRoute already
  hydrates store), keep only history.replaceState to clean token from URL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@FernandoAlmeidaPinto FernandoAlmeidaPinto self-assigned this Jul 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants