UNPKG

@nerdlat/auth

Version:

Authentication library similar to Clerk for React and Express applications

196 lines (144 loc) 4.15 kB
# @nerd/auth Una librería de autenticación simple e inspirada en Clerk para aplicaciones React y Express. ## Instalación ```bash npm install @nerd/auth # o yarn add @nerd/auth # o pnpm add @nerd/auth ``` ## Configuración del Servidor ### 1. Configuración básica con Express ```typescript import express from 'express'; import cookieParser from 'cookie-parser'; import { createAuthRouter } from '@nerd/auth'; const app = express(); app.use(express.json()); app.use(cookieParser()); // Crear y montar las rutas de autenticación const authRouter = createAuthRouter(); app.use('/api/auth', authRouter); app.listen(3000); ``` ### 2. Configuración avanzada ```typescript const authRouter = createAuthRouter({ sessionCookie: 'my-custom-token', onUserCreate: (user) => { console.log('Usuario creado:', user.email); // Enviar email de bienvenida, etc. }, onUserLogin: (user) => { console.log('Usuario logueado:', user.email); // Analytics, logs, etc. }, validateEmail: (email) => { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); }, validatePassword: (password) => { return password.length >= 8; } }); ``` ### 3. Proteger rutas ```typescript import { requireAuth } from '@nerd/auth'; // Ruta protegida app.get('/api/protected', requireAuth(), (req, res) => { res.json({ message: 'Contenido protegido', user: req.user }); }); ``` ## Configuración del Cliente (React) ### 1. Envolver tu aplicación con AuthProvider ```jsx import { AuthProvider } from '@nerd/auth'; function App() { return ( <AuthProvider fallback={<div>Cargando...</div>}> <YourAppContent /> </AuthProvider> ); } ``` ### 2. Usar los componentes de autenticación ```jsx import { SignIn, SignUp, UserProfile, useAuth } from '@nerd/auth'; function AuthSection() { const { isSignedIn, isLoading } = useAuth(); if (isLoading) return <div>Cargando...</div>; if (!isSignedIn) { return ( <div> <SignIn /> <SignUp /> </div> ); } return <UserProfile />; } ``` ### 3. Usar el hook useAuth ```jsx import { useAuth, useUser } from '@nerd/auth'; function MyComponent() { const { user, isSignedIn, isLoading, setUser } = useAuth(); // O solo obtener el usuario const user = useUser(); if (!isSignedIn) { return <div>Por favor inicia sesión</div>; } return <div>¡Hola {user.email}!</div>; } ``` ### 4. HOC para proteger componentes ```jsx import { withAuth } from '@nerd/auth'; const ProtectedComponent = withAuth(function MyComponent() { return <div>Este componente solo se muestra a usuarios autenticados</div>; }); ``` ## Configuración Personalizada Si tu API está en una URL diferente o usas un path personalizado: ```typescript import { configureAuth } from '@nerd/auth'; // Configurar antes de usar los componentes configureAuth({ baseUrl: 'https://mi-api.com', apiPath: '/auth' // en lugar de /api/auth }); ``` ## Variables de Entorno Crea un archivo `.env` en tu proyecto: ```env AUTH_SECRET=tu-secreto-jwt-muy-seguro NODE_ENV=production ``` ## API Endpoints La librería crea automáticamente estos endpoints: - `POST /api/auth/login` - Iniciar sesión - `POST /api/auth/signup` - Registrarse - `GET /api/auth/me` - Obtener usuario actual - `POST /api/auth/logout` - Cerrar sesión - `POST /api/auth/reset-password` - Resetear contraseña ## Componentes Disponibles - `<AuthProvider>` - Proveedor de contexto de autenticación - `<SignIn>` - Formulario de inicio de sesión - `<SignUp>` - Formulario de registro - `<UserProfile>` - Perfil del usuario con opción de logout - `<ResetPassword>` - Formulario para resetear contraseña ## Hooks Disponibles - `useAuth()` - Hook principal con toda la información de auth - `useUser()` - Solo retorna el usuario actual - `useSession()` - Retorna `isSignedIn` e `isLoading` ## Funciones de Utilidad - `configureAuth(config)` - Configurar URLs personalizadas - `createAuthRouter(options)` - Crear router de Express - `requireAuth(cookieName?)` - Middleware para proteger rutas - `withAuth(Component)` - HOC para proteger componentes ## Licencia MIT