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_iden 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 sinactor_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.