Esta aplicación tiene el registro público DESHABILITADO. Solo los administradores pueden crear nuevos usuarios.
Crea un nuevo usuario en el sistema. Solo accesible por usuarios con rol de admin.
Autenticación requerida: Sí (rol: admin)
Request Body:
{
"email": "usuario@ejemplo.com",
"password": "PasswordSegura123!",
"name": "Nombre del Usuario",
"role": "user" // opcional, por defecto: "user"
}Response (201):
{
"message": "Usuario creado exitosamente",
"user": {
"id": "user-id",
"email": "usuario@ejemplo.com",
"name": "Nombre del Usuario",
"role": "user",
"createdAt": "2025-11-17T..."
}
}Errores posibles:
401- No autenticado403- No autorizado (no es admin)400- Datos inválidos409- Email ya registrado500- Error del servidor
async function crearUsuario(datos: {
email: string;
password: string;
name: string;
role?: string;
}) {
const response = await fetch("/api/admin/users/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
credentials: "include", // Importante para enviar cookies de sesión
body: JSON.stringify(datos),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || "Error al crear usuario");
}
return await response.json();
}
// Uso
try {
const result = await crearUsuario({
email: "nuevo@ejemplo.com",
password: "Password123!",
name: "Usuario Nuevo",
role: "user",
});
console.log("Usuario creado:", result.user);
} catch (error) {
console.error("Error:", error.message);
}Better Auth proporciona endpoints adicionales que puedes usar:
Banear un usuario del sistema.
Desbanear un usuario.
Cambiar el rol de un usuario.
Eliminar permanentemente un usuario.
Listar todos los usuarios (con paginación).
Impersonar a un usuario (para debugging).
Para más información sobre estos endpoints, consulta la documentación de Better Auth.
Recuerda proteger todas las rutas de administración en tu aplicación:
// Ejemplo de middleware para proteger rutas
import { auth } from "@/lib/auth";
import { NextRequest, NextResponse } from "next/server";
export async function middleware(request: NextRequest) {
const session = await auth.api.getSession({
headers: request.headers,
});
// Verificar autenticación
if (!session?.user) {
return NextResponse.redirect(new URL("/login", request.url));
}
// Verificar rol de admin para rutas de admin
if (request.nextUrl.pathname.startsWith("/admin")) {
if (session.user.role !== "admin") {
return NextResponse.redirect(new URL("/unauthorized", request.url));
}
}
return NextResponse.next();
}
export const config = {
matcher: ["/admin/:path*", "/api/admin/:path*"],
};