Gestion de Usuarios

API completa para crear, actualizar y gestionar usuarios en tu aplicacion.

Modelo de Usuario

interface User {
  id: string;                  // ID unico del usuario
  externalId?: string;         // ID externo opcional
  email: string;               // Email principal
  emailVerified: boolean;      // Estado de verificacion
  phone?: string;              // Telefono opcional
  phoneVerified: boolean;      // Estado de verificacion
  username?: string;           // Username opcional
  firstName?: string;          // Nombre
  lastName?: string;           // Apellido
  avatarUrl?: string;          // URL del avatar
  publicMetadata: Record<string, any>;   // Metadata publica
  privateMetadata: Record<string, any>;  // Metadata privada
  unsafeMetadata: Record<string, any>;   // Metadata del cliente
  banned: boolean;             // Usuario baneado
  locked: boolean;             // Usuario bloqueado
  createdAt: string;           // Fecha de creacion
  updatedAt: string;           // Ultima actualizacion
}

Obtener usuario actual

En el cliente

import { useUser } from '@auris/react';

function Profile() {
  const { user, isLoaded } = useUser();

  if (!isLoaded) return <Loading />;
  if (!user) return <SignIn />;

  return (
    <div>
      <h1>Hola, {user.firstName}!</h1>
      <p>{user.email}</p>
    </div>
  );
}

En el servidor (Next.js)

import { currentUser } from '@auris/nextjs/server';

export default async function ProfilePage() {
  const user = await currentUser();

  if (!user) {
    redirect('/sign-in');
  }

  return <div>Usuario: {user.email}</div>;
}

Actualizar perfil

import { useUser } from '@auris/react';

function EditProfile() {
  const { user, update } = useUser();

  const handleSubmit = async (data) => {
    await update({
      firstName: data.firstName,
      lastName: data.lastName,
    });
  };

  // ...
}

Backend SDK

Listar usuarios

const { data, totalCount } = await auris.users.list({
  limit: 20,
  offset: 0,
  orderBy: '-createdAt', // - para descendente
  query: 'juan',         // Busqueda por nombre/email
});

console.log(`Total: ${totalCount} usuarios`);
for (const user of data) {
  console.log(user.email);
}

Obtener usuario por ID

const user = await auris.users.get('user_xxxxx');

Obtener usuario por email

const user = await auris.users.getByEmail('juan@email.com');

Crear usuario

const user = await auris.users.create({
  email: 'nuevo@email.com',
  password: 'securePassword123!',
  firstName: 'Juan',
  lastName: 'Perez',
  emailVerified: true, // Opcional: saltar verificacion
  publicMetadata: {
    plan: 'pro',
  },
});

Actualizar usuario

const user = await auris.users.update('user_xxxxx', {
  firstName: 'Juan Carlos',
  publicMetadata: {
    plan: 'enterprise',
    customField: 'value',
  },
});

Eliminar usuario

await auris.users.delete('user_xxxxx');

Metadata

Auris soporta tres tipos de metadata para usuarios:

publicMetadata

Visible en el cliente y servidor. Solo modificable desde el servidor.

// Casos de uso:
// - Rol del usuario
// - Plan de suscripcion
// - Permisos

await auris.users.update('user_xxxxx', {
  publicMetadata: {
    role: 'admin',
    plan: 'pro',
    features: ['analytics', 'export'],
  },
});

privateMetadata

Solo visible en el servidor. Nunca se envia al cliente.

// Casos de uso:
// - IDs de sistemas externos
// - Datos sensibles
// - Notas internas

await auris.users.update('user_xxxxx', {
  privateMetadata: {
    stripeCustomerId: 'cus_xxxxx',
    internalNotes: 'Cliente VIP',
    salesRepId: 'rep_123',
  },
});

unsafeMetadata

Modificable desde el cliente. Para preferencias del usuario.

// En el cliente
const { user, update } = useUser();

await update({
  unsafeMetadata: {
    theme: 'dark',
    language: 'es',
    notifications: true,
  },
});

Acciones de usuario

Banear usuario

// Banear - el usuario no puede iniciar sesion
await auris.users.ban('user_xxxxx');

// Desbanear
await auris.users.unban('user_xxxxx');

Bloquear usuario

// Bloquear temporalmente (ej: despues de intentos fallidos)
await auris.users.lock('user_xxxxx');

// Desbloquear
await auris.users.unlock('user_xxxxx');

Revocar sesiones

// Cerrar todas las sesiones del usuario
await auris.users.revokeSessions('user_xxxxx');

Cambiar contrasena

await auris.users.updatePassword('user_xxxxx', {
  newPassword: 'newSecurePassword123!',
});

Verificacion de email

Enviar email de verificacion

await auris.users.sendVerificationEmail('user_xxxxx');

Verificar email con codigo

await auris.users.verifyEmail('user_xxxxx', {
  code: '123456',
});

Avatar

// Actualizar avatar con URL
await auris.users.update('user_xxxxx', {
  avatarUrl: 'https://example.com/avatar.jpg',
});

// O subir imagen directamente
const user = await auris.users.setAvatar('user_xxxxx', {
  file: imageBuffer, // Buffer o Blob
});

Webhooks de usuarios

Eventos disponibles:

  • user.created - Nuevo usuario registrado
  • user.updated - Usuario actualizado
  • user.deleted - Usuario eliminado
  • user.signed_in - Inicio de sesion
  • user.signed_out - Cierre de sesion
// Ejemplo de payload
{
  "type": "user.created",
  "data": {
    "id": "user_xxxxx",
    "email": "nuevo@email.com",
    "firstName": "Juan",
    "lastName": "Perez",
    "createdAt": "2024-01-15T10:30:00Z"
  }
}