feat(auth): adicionar login social com Google - #585
Open
RafaelFantinel wants to merge 13 commits into
Open
Conversation
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
requested changes
May 4, 2026
FernandoAlmeidaPinto
left a comment
Member
There was a problem hiding this comment.
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.
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
approved these changes
May 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que foi feito
Autenticação
/auth/callbackque recebe o token vindo do redirect OAuth, salva na store e redireciona para o dashboardOnboarding para novos usuários Google
/onboardingexibida quando o usuário autenticou pelo Google mas ainda não tem perfil completoprofileComplete: truee o usuário é direcionado ao dashboardProteção de rotas
OnboardingGate: bloqueia o acesso ao dashboard enquantoprofileCompleteforfalse, redirecionando para/onboardingOnboardingRoute: protege a própria rota/onboarding— só entra quem tem token válido comprofileComplete === false, impedindo acesso direto por URLStore e decodificação
profileCompleteadicionado à store de autenticação e extraído do JWT no decodedecoderUserparabirthday,stateeroles— campos que usuários Google não têm preenchidos inicialmenteFluxos
Novo usuário Google
/onboarding?token=...profileComplete: true→ dashboardUsuário com conta existente (auto-link)
googleIdà conta, confirma email pendente se houver/auth/callback?token=...→ dashboard, sem onboarding