Saltar a contenido

RF-008 — Inicio de sesión con Google

Estado Implementado, con falla conocida en cuentas preexistentes
Tipo Flujo de autenticación federada en el storefront
Ubicación app/[countryCode]/auth/google/callback/page.tsx · src/lib/data/customer.ts · src/modules/account/components/google-login-button/
Depende de RF-000 · provider auth-google del backend — RF-009 de Medusa

Requisito

Permitir al cliente ingresar o registrarse con su cuenta de Google, resolviendo en un solo paso la creación del cliente cuando la identidad es nueva, y dejando la sesión establecida con el mismo mecanismo de cookie que el ingreso por correo y contraseña.

Solución adoptada

Delegar la validación de la credencial al backend y resolver en el storefront el retorno del proveedor: intercambiar el código por un token, guardarlo en cookie desde el servidor y, si el token no trae cliente asociado, crear el cliente con los datos que devuelve Google.

sequenceDiagram
    participant N as Navegador
    participant SF as Storefront
    participant API as Backend
    participant G as Google
    N->>SF: Botón «Ingresar con Google»
    SF->>API: Solicitud de autenticación
    API-->>N: Redirección al consentimiento
    N->>G: Consentimiento
    G-->>SF: Retorno con código
    SF->>API: callback(customer, google, params)
    API-->>SF: Token
    SF->>SF: Guardar token en cookie (server action)
    alt Token sin actor_id
        SF->>API: Crear cliente con datos de Google
    end
    SF->>N: Sesión iniciada

Reglas de negocio

  • Guardar el token en cookie desde el servidor, con el mismo tratamiento que la sesión por correo y contraseña.
  • Determinar la existencia del cliente por la presencia de actor_id en el token: si falta, crear el cliente con el correo, el nombre y el apellido que provee Google.
  • Revalidar la caché de cliente tras el alta, para que la sesión se refleje sin recarga.
  • Interrumpir el flujo con mensaje al cliente cuando el proveedor devuelve error o no entrega correo.

Criterios de aceptación

# Criterio
1 Ingresar con una cuenta de Google no registrada y quedar creado como cliente
2 Reingresar con la misma cuenta y recuperar el mismo cliente, sin duplicarlo
3 Establecer la sesión en cookie y ver el panel de cuenta sin recarga manual
4 Informar el error al cliente cuando el proveedor rechaza el consentimiento

Limitaciones conocidas

  • Cuenta preexistente con el mismo correo. Un cliente registrado con correo y contraseña que intenta ingresar con Google recibe 422 Customer with this email already has an account: el token llega sin actor_id, el storefront intenta crear el cliente y el backend lo rechaza. Medusa v2 no vincula identidades entre proveedores por correo, de modo que la resolución exige desarrollo del lado del backend.
  • Decodificar el token en el navegador para decidir si crear el cliente, sin verificar su firma: la decisión se toma sobre datos no validados en el cliente.