account-sigma-sdk
v1.2.4
Published
SDK oficial de Accounts Eureka Sigma para autenticación y gestión de proyectos con múltiples sesiones y cookies seguras
Maintainers
Readme
Account Sigma SDK
SDK oficial para autenticación con Accounts Sigma API. Soporta múltiples métodos de autenticación: Email, Google y Microsoft, con manejo de múltiples sesiones simultáneas usando cookies seguras y sistema de token master para agrupar sesiones por contexto de navegador.
🚀 Instalación
npm install account-sigma-sdk📦 Configuración
1. Configuración Básica
import { AuthProvider } from 'account-sigma-sdk';
function App() {
return (
<AuthProvider
config={{
projectToken: 'tu_project_token',
apiUrl: 'https://tu-api.com', // opcional
googleClientId: 'tu_google_client_id',
microsoftClientId: 'tu_microsoft_client_id',
microsoftTenantId: 'tu_microsoft_tenant_id'
}}
>
<YourApp />
</AuthProvider>
);
}2. Configuración de Cookies (Opcional)
El SDK usa cookies por defecto para mantener las sesiones. Puedes personalizar las opciones:
<AuthProvider
config={{
projectToken: 'tu_project_token',
// Opciones de cookies
secure: true, // true por defecto (HTTPS requerido)
sameSite: 'strict', // 'strict', 'lax', o 'none'
cookiePath: '/', // ruta de las cookies
cookieDomain: '.tudominio.com', // dominio para las cookies
cookieMaxAge: 15 * 24 * 60 * 60 * 1000, // 15 días por defecto
// Opciones avanzadas
cookieOptions: {
httpOnly: false, // false por defecto (permite acceso desde JS)
// Otras opciones específicas
}
}}
>
<YourApp />
</AuthProvider>3. Uso Básico
import { useAuth } from 'account-sigma-sdk';
function LoginComponent() {
const {
loginWithGoogle,
loginWithMicrosoft,
requestCode,
verifyCode
} = useAuth();
// Autenticación por email
const handleEmailLogin = async () => {
const result = await requestCode('[email protected]');
if (result.ok) {
// Mostrar input para código
}
};
// Autenticación con Google (SIMPLIFICADA)
const handleGoogleLogin = async () => {
const result = await loginWithGoogle('popup'); // o 'oneTap'
if (result.ok) {
console.log('Usuario autenticado:', result);
}
};
// Autenticación con Microsoft (SIMPLIFICADA)
const handleMicrosoftLogin = async () => {
const result = await loginWithMicrosoft();
if (result.ok) {
console.log('Usuario autenticado:', result);
}
};
return (
<div>
<button onClick={handleGoogleLogin}>
Continuar con Google
</button>
<button onClick={handleMicrosoftLogin}>
Continuar con Microsoft
</button>
</div>
);
}🔧 Métodos Disponibles
Autenticación por Email
const { requestCode, verifyCode } = useAuth();
// 1. Solicitar código
const result = await requestCode('[email protected]');
// 2. Verificar código
const authResult = await verifyCode('[email protected]', '123456');Autenticación OAuth Simplificada
const { loginWithGoogle, loginWithMicrosoft } = useAuth();
// Google (maneja todo el flujo automáticamente)
const googleResult = await loginWithGoogle('popup'); // o 'oneTap'
// Microsoft (maneja todo el flujo automáticamente)
const microsoftResult = await loginWithMicrosoft();Autenticación OAuth Directa (con tokens)
const { authenticateWithGoogle, authenticateWithMicrosoft } = useAuth();
// Si ya tienes los tokens
const googleResult = await authenticateWithGoogle(googleIdToken);
const microsoftResult = await authenticateWithMicrosoft(microsoftAccessToken);Manejo de Múltiples Sesiones
const {
sessions,
activeSession,
switchSession,
logoutSession,
getSessions
} = useAuth();
// Obtener todas las sesiones del servidor
const serverSessions = await getSessions();
// Cambiar a otra sesión
const success = switchSession('session_id');
// Cerrar una sesión específica
await logoutSession('session_id');
// Ver sesiones disponibles
console.log('Sesiones:', sessions);
console.log('Sesión activa:', activeSession);Utilidades
const {
isAuthenticated,
getCurrentUser,
logout,
isGoogleAvailable,
isMicrosoftAvailable
} = useAuth();
// Verificar estado
if (isAuthenticated) {
const user = getCurrentUser();
console.log('Usuario:', user);
}
// Verificar disponibilidad OAuth
if (isGoogleAvailable()) {
// Mostrar botón de Google
}
// Cerrar sesión actual
await logout();🛡️ Protección de Rutas
import { ProtectedRoute } from 'account-sigma-sdk';
function App() {
return (
<AuthProvider>
<ProtectedRoute fallback={<LoginPage />}>
<Dashboard />
</ProtectedRoute>
</AuthProvider>
);
}📋 Respuestas de la API
Respuesta Exitosa
{
"ok": true,
"uid": "user_id",
"name": "Nombre del Usuario",
"avatar": "https://example.com/avatar.jpg",
"provider": "google|microsoft|email",
"token": "jwt_token_here",
"sessionId": "session_id",
"expiraEn": "2024-01-15T10:30:00.000Z"
}Respuesta de Error
{
"ok": false,
"msg": "Mensaje de error"
}🔄 Gestión de Sesiones
Componente de Administración de Sesiones
import { SessionManager } from 'account-sigma-sdk';
function App() {
return (
<AuthProvider>
<SessionManager />
</AuthProvider>
);
}Estructura de Sesión
{
id: "session_id",
dispositivo: "Mozilla/5.0...",
ip: "192.168.1.1",
ultimoAcceso: "2024-01-10T15:30:00.000Z",
expiraEn: "2024-01-25T15:30:00.000Z",
esActual: true
}🎯 Sistema de Token Master
¿Qué es el Token Master?
El Token Master es un sistema que agrupa las sesiones por contexto de navegador. Esto permite:
- Aislamiento de Sesiones: Cada pestaña/ventana del navegador tiene su propio grupo de sesiones
- Seguridad Mejorada: Las sesiones no se mezclan entre diferentes contextos
- Experiencia de Usuario: Cada contexto mantiene su estado independiente
Información del Token Master
const { tokenMaster } = useAuth();
// Información del token master actual
console.log('Token Master:', tokenMaster);
// {
// id: "master_token_id",
// email: "[email protected]",
// expiraEn: "2024-02-15T10:30:00.000Z",
// activo: true
// }🍪 Sistema de Cookies
Características de las Cookies
- Persistencia: Las sesiones se mantienen incluso después de cerrar el navegador
- Seguridad: Configuración
secureysameSitepor defecto - Expiración: 15 días por defecto (configurable)
- Múltiples Sesiones: Soporte para múltiples sesiones simultáneas
- Token Master: Cookie separada para el token master
Configuración de Cookies
// Configuración por defecto
{
secure: true, // Requiere HTTPS
sameSite: 'strict', // Protección CSRF
path: '/', // Ruta de las cookies
maxAge: 15 * 24 * 60 * 60 * 1000, // 15 días
httpOnly: false // Permite acceso desde JavaScript
}Cookies Utilizadas
faceticket-sessions: Almacena todas las sesiones del usuariofaceticket-active-session: Identifica la sesión activa actualfaceticket-master: Token master para agrupar sesiones por contexto
🔐 Configuración OAuth
Google OAuth
- Ve a Google Cloud Console
- Crea un proyecto y habilita Google+ API
- Crea credenciales OAuth 2.0
- Configura URIs autorizados:
http://localhost:3000https://tu-dominio.com
Microsoft OAuth
- Ve a Azure Portal
- Registra una nueva aplicación
- Configura permisos:
User.Read,email,profile
🆕 Nuevas Funcionalidades
Sistema de Token Master
- Agrupación de Sesiones: Las sesiones se agrupan por contexto de navegador
- Aislamiento: Cada pestaña/ventana mantiene sesiones independientes
- Persistencia: El token master se mantiene por 30 días
- Seguridad: Evita mezclar sesiones entre diferentes contextos
Múltiples Sesiones con Cookies
- Persistencia Mejorada: Las sesiones se mantienen después de cerrar el navegador
- Almacenamiento Seguro: Uso de cookies con configuración de seguridad por defecto
- Sesión Activa: Solo una sesión está activa a la vez
- Cambio de Sesión: Cambia entre sesiones sin re-autenticación
- Cierre Selectivo: Cierra sesiones específicas manteniendo otras activas
Control de Sesiones desde la API
- Gestión Centralizada: La API controla todas las sesiones
- Información de Dispositivo: Registra IP, User Agent y dispositivo
- Expiración Automática: Las sesiones expiran automáticamente
- Seguridad Mejorada: Validación de sesiones en cada request
Mejoras en el SDK
- Cookies por Defecto: Uso de cookies en lugar de localStorage
- Métodos Actualizados:
getCurrentUser(),getCurrentToken(),getAllSessions() - Nuevos Métodos:
switchSession(),logoutSession(),getSessions() - Estado React: Acceso a
sessionsyactiveSessionen el hookuseAuth - Token Master: Acceso a información del token master actual
📝 Ejemplo Completo
import React from 'react';
import { AuthProvider, useAuth, SessionManager } from 'account-sigma-sdk';
function Dashboard() {
const {
user,
sessions,
tokenMaster,
switchSession,
logoutSession
} = useAuth();
return (
<div>
<h1>Bienvenido, {user?.name}</h1>
{/* Información del Token Master */}
{tokenMaster && (
<div className="token-master-info">
<h3>Token Master</h3>
<p><strong>Email:</strong> {tokenMaster.email}</p>
<p><strong>Expira:</strong> {new Date(tokenMaster.expiraEn).toLocaleString()}</p>
</div>
)}
<h2>Sesiones Activas ({sessions.length})</h2>
{sessions.map(session => (
<div key={session.id}>
<p>Dispositivo: {session.dispositivo}</p>
<p>IP: {session.ip}</p>
{!session.esActual && (
<button onClick={() => switchSession(session.id)}>
Cambiar a esta sesión
</button>
)}
<button onClick={() => logoutSession(session.id)}>
Cerrar sesión
</button>
</div>
))}
</div>
);
}
function App() {
return (
<AuthProvider config={{
projectToken: 'tu_token',
secure: true, // Requiere HTTPS
sameSite: 'strict'
}}>
<Dashboard />
<SessionManager />
</AuthProvider>
);
}🔧 Troubleshooting
Problemas Comunes
Las sesiones no persisten después de cerrar el navegador:
- Verifica que
secure: falseen desarrollo local - Asegúrate de que el dominio esté configurado correctamente
Error de cookies en desarrollo:
// Para desarrollo local
<AuthProvider config={{
projectToken: 'tu_token',
secure: false, // Deshabilitar en desarrollo
sameSite: 'lax' // Más permisivo en desarrollo
}}>Cookies no se establecen:
- Verifica que el dominio esté configurado correctamente
- Asegúrate de que el protocolo sea HTTPS en producción
Token Master no se crea:
- Verifica que la API esté configurada correctamente
- Asegúrate de que el proyecto tenga permisos para crear tokens master
📚 Versiones
- v1.1.12: Sistema de token master, mejoras en cookies, múltiples sesiones
- v1.1.0: Soporte para múltiples sesiones con cookies
- v1.0.0: Versión inicial con autenticación básica
🤝 Contribución
Para contribuir al SDK:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crea un Pull Request
📄 Licencia
MIT License - ver LICENSE para más detalles.
