Saltar al contenido principal

Sesión de Usuario en Magento

La gestión de la sesión de usuario en la integración con Magento permite mantener el estado de autenticación y acceder a la información del usuario.

Estructura de datos principal

La sesión de usuario se gestiona principalmente a través de:

  • sessionId: Identificador de sesión de Magento
  • Customer: Objeto que contiene la información del usuario autenticado

Componentes clave

MagentoContext

El contexto básico de Magento contiene la información de la sesión:

export interface MagentoConfig {
cartId?: string
sessionId?: string
}

Hooks y métodos principales

Autenticación de usuario

// Iniciar sesión de usuario
quoteLogin: (email: string, password: string, is_checkout?: boolean) => Promise<CustomerToken|null>

// Obtener datos del usuario autenticado
getCustomerData: () => Promise<Customer|null>

// Solicitar restablecimiento de contraseña
requestPasswordReset: (email: string) => Promise<boolean>

Verificación de estado

// Propiedades para verificar el estado de la sesión
isUserDataLoaded: boolean // Indica si los datos del usuario ya se han cargado
isLoggedUser: boolean // Indica si hay un usuario autenticado
isGuestUser: boolean // Indica si es un usuario no autenticado (invitado)

Implementación

La implementación principal de la autenticación se encuentra en magento-service-provider.ts:

export const quoteLogin = async (email: string, password: string, is_checkout = false) => {
const response = await request({
query: QuoteLoginDocument,
variables: { email, password, is_checkout },
}) as QuoteLoginMutation
return response?.generateCustomerToken
}

export const getCustomerData = async (): Promise<Customer|null> => {
const response = await request({
query: QuoteCustomerDocument,
variables: {}
}) as QuoteCustomerQuery
return response?.customer as Customer|null
}

Flujo de autenticación

  1. El usuario introduce sus credenciales (email y contraseña)
  2. Se llama a quoteLogin que devuelve un token de autenticación
  3. El token se almacena en cookies (gestionado por Magento)
  4. Se actualiza el estado con getMe(true) para obtener la información del usuario
  5. La información del usuario se almacena en el estado global (customer)
  6. El estado isLoggedUser se actualiza para reflejar que el usuario está autenticado

Uso en componentes

Para utilizar la funcionalidad de sesión en los componentes:

import useMagentoOrderContainer from "src/magento/hooks/use-magento-order-container";

const MyComponent = () => {
const {
isLoggedUser,
customer,
quoteLogin,
requestPasswordReset
} = useMagentoOrderContainer();

// Uso de la funcionalidad de sesión
// ...
}

Sesión para usuarios invitados

Para usuarios no autenticados (invitados), se puede establecer un email para el checkout:

// Establecer email para usuario invitado
setGuestEmail: (email: string) => Promise<Cart|null>

Este método permite asociar un email a un carrito para usuarios que no desean registrarse pero necesitan completar una compra.