¿Qué hace better-auth-mejores-prácticas?
Configura el servidor y cliente de Better Auth, adaptadores de base de datos, sesiones, plugins y variables de entorno. Úsalo cuando los usuarios mencionen Better Auth, betterauth, auth.ts o necesiten configurar autenticación TypeScript con correo/contraseña, OAuth o plugins.
Configuración del servidor
Crea un archivo auth.ts en la raíz de tu proyecto:
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export const auth = betterAuth({
database: prismaAdapter(prisma, {
provider: "sqlite", // o "postgresql", "mysql", etc.
}),
emailAndPassword: {
enabled: true,
},
socialProviders: {
google: {
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
},
},
plugins: [],
});
Variables de entorno
Crea un archivo .env.local con:
BETTER_AUTH_SECRET="tu-secreto-aqui"
BETTER_AUTH_URL="http://localhost:3000"
GOOGLE_CLIENT_ID=""
GOOGLE_CLIENT_SECRET=""
Configuración del cliente
En tu aplicación frontend (por ejemplo, en lib/auth-client.ts):
import { createAuthClient } from "better-auth/client";
export const authClient = createAuthClient({
baseURL: process.env.BETTER_AUTH_URL,
});
Uso básico
Iniciar sesión
const { data } = await authClient.signIn.email({
email: "[email protected]",
password: "password123",
});
Registrar usuario
const { data } = await authClient.signUp.email({
email: "[email protected]",
password: "password123",
name: "Juan Pérez",
});
Cerrar sesión
await authClient.signOut();
Obtener sesión actual
const session = await authClient.getSession();
Adaptadores de base de datos
Better Auth soporta múltiples adaptadores. Ejemplo con Drizzle:
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { db } from "./db";
export const auth = betterAuth({
database: drizzleAdapter(db, {
provider: "pg", // o "mysql", "sqlite"
}),
});
Otros adaptadores incluyen:
- Prisma (
better-auth/adapters/prisma) - Drizzle (
better-auth/adapters/drizzle) - MongoDB (
better-auth/adapters/mongodb) - Kysely (
better-auth/adapters/kysely)
Plugins
Agrega plugins para funcionalidades adicionales:
import { magicLink } from "better-auth/plugins/magic-link";
import { emailOTP } from "better-auth/plugins/email-otp";
export const auth = betterAuth({
plugins: [
magicLink(),
emailOTP(),
],
});
Manejo de sesiones
Proteger rutas
import { auth } from "./auth";
export async function handler(request: Request) {
const session = await auth.api.getSession({
headers: request.headers,
});
if (!session) {
return new Response("No autorizado", { status: 401 });
}
return new Response("Bienvenido");
}
Buenas prácticas
- Usa variables de entorno: nunca hardcodees secretos.
- Configura el adaptador correcto: asegúrate de que coincida con tu base de datos.
- Protege las rutas: siempre verifica la sesión en endpoints sensibles.
- Usa HTTPS en producción: las cookies de sesión deben ser seguras.
- Mantén los plugins actualizados: revisa la documentación oficial para nuevas versiones.