Implementar Autenticação via Google OAuth2
Banco de Dados
Adicionar duas colunas na tabela user:
google_id (varchar, nullable) — identificador do perfil Google
profile_complete (boolean, nullable) — null para usuários tradicionais, false para OAuth sem perfil completo, true após onboarding
Variáveis de Ambiente
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=
CLIENT_URL=
Endpoints
GET /user/auth/google
Inicia fluxo OAuth, redireciona para Google. Sem body, sem resposta direta.
GET /user/auth/google/callback
Callback do Google. Lógica:
-
Email já existe na base:
- Associar googleId ao usuário existente (se ainda não tiver)
- Gerar JWT
- Se
profileComplete === false → redirecionar para {CLIENT_URL}/onboarding?token=...
- Caso contrário → redirecionar para
{CLIENT_URL}/auth/callback?token=...
-
Email não existe:
- Criar usuário com: firstName, lastName, email, googleId,
profileComplete = false, role = aluno, sem senha, sem confirmação de email pendente
- Redirecionar para
/onboarding?token=...
PATCH /user/complete-profile
Autenticado via JWT. Apenas para usuários com profileComplete === false.
Corpo da requisição:
{
"phone": "string",
"gender": "Gender",
"birthday": "string (data ISO)",
"state": "string",
"city": "string",
"lgpd": "boolean"
}
Retorna novo token.
Dependências
passport-google-oauth20
- Configurar GoogleStrategy com Passport
- Criar GoogleAuthGuard
Implementar Autenticação via Google OAuth2
Banco de Dados
Adicionar duas colunas na tabela
user:google_id(varchar, nullable) — identificador do perfil Googleprofile_complete(boolean, nullable) — null para usuários tradicionais, false para OAuth sem perfil completo, true após onboardingVariáveis de Ambiente
Endpoints
GET /user/auth/google
Inicia fluxo OAuth, redireciona para Google. Sem body, sem resposta direta.
GET /user/auth/google/callback
Callback do Google. Lógica:
Email já existe na base:
profileComplete === false→ redirecionar para{CLIENT_URL}/onboarding?token=...{CLIENT_URL}/auth/callback?token=...Email não existe:
profileComplete = false, role = aluno, sem senha, sem confirmação de email pendente/onboarding?token=...PATCH /user/complete-profile
Autenticado via JWT. Apenas para usuários com
profileComplete === false.Corpo da requisição:
{ "phone": "string", "gender": "Gender", "birthday": "string (data ISO)", "state": "string", "city": "string", "lgpd": "boolean" }Retorna novo token.
Dependências
passport-google-oauth20