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 MagentoCustomer: 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
- El usuario introduce sus credenciales (email y contraseña)
- Se llama a
quoteLoginque devuelve un token de autenticación - El token se almacena en cookies (gestionado por Magento)
- Se actualiza el estado con
getMe(true)para obtener la información del usuario - La información del usuario se almacena en el estado global (
customer) - El estado
isLoggedUserse 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.