GET /auth/google/link
Iniciar vínculo de conta Google (autenticado)
/auth/google/linkAuth: accessTokenPara usuários já autenticados que querem vincular uma conta Google à sua conta existente. Diferente de GET /auth/google (que redireciona o navegador), este endpoint retorna a URL em JSON — o frontend é responsável por levar o usuário até ela (geralmente abrindo numa popup ou redirecionando).
O state JWT carrega { mode: 'link', userId }, garantindo que o callback saiba qual conta vincular ao Google identificado.
Quando chamar
- Tela "Configurações → Conexões" → botão "Vincular Google"
- Frontend chama via fetch (com Bearer JWT), recebe
{ url }, e abre viawindow.location.href = urlou popup
Request
Esta requisição não tem corpo.
Sem body. Header obrigatório: Authorization: Bearer <accessToken>.
Response
200
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
| url | string (uri) | sim | URL de autorização do Google. Frontend deve redirecionar o navegador para ela. |
{
"url": "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=...&scope=openid+email+profile&state=eyJhbGc...&prompt=select_account&redirect_uri=..."
}Frontend então faz:
window.location.href = urlErros
Sem respostas de erro documentadas.
| Status | Causa | Como resolver |
|---|---|---|
| 401 | JWT ausente/inválido | Refresh ou login |
Exemplos
curl -X GET 'http://localhost:3003/auth/google/link' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer SEU_ACCESS_TOKEN' \
-d '{}'await fetch('http://localhost:3003/auth/google/link', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + accessToken,
},
body: JSON.stringify({}),
})Fluxo completo no frontend
const r = await fetch('/auth/google/link', {
headers: { Authorization: `Bearer ${accessToken}` },
})
const { url } = await r.json()
window.location.href = url
// User vai pro Google, autoriza, é redirecionado pro callback,
// que redireciona pro frontend com ?status=linkedSide effects
- JWT signing —
statecom{ mode: 'link', userId, exp: +5min } - Sem DB ainda
- Sem cookies, notificações ou socket
Diferença vs GET /auth/google
GET /auth/google | GET /auth/google/link | |
|---|---|---|
| Auth | público | obrigatório (JWT) |
| Resposta | 302 Redirect | 200 JSON { url } |
| State | { mode: 'login' } | { mode: 'link', userId } |
| Caso de uso | Login/registro inicial | Vincular Google a conta existente |
Por que diferente: pra link, o frontend já sabe que está autenticado e pode abrir popup controlada. Pra login, o user nem está logado ainda — redirect direto é mais simples.
Relacionados
- Endpoint:
GET /auth/google/callback— recebe o callback (statuslinked) - Endpoint:
DELETE /auth/google/link— desvincular - Endpoint:
GET /auth/google— login inicial via Google - Tabela:
users— camposgoogle_id,google_linked_at