Saltar al contenido principal
El Write Hook, que se ejecuta cada vez que creas o actualizas un usuario, te permite hacer cosas como:
  • Cambiar la contraseña del usuario
  • Cambiar la dirección de correo electrónico del usuario
  • Actualizar el perfil del usuario
También puedes usar el Write Hook para establecer automáticamente valores predeterminados para los usuarios recién creados. Por ejemplo, puede que quieras asignar automáticamente a un usuario el mismo grupo, departamento o proveedor que te hayan asignado a ti.
Auth0 solo admite la creación de usuarios con Database Connections.

Contrato del hook

  • ctx: Objeto de contexto.
    • request.originalUser: Valores del usuario actual, donde el payload contiene el nuevo conjunto de campos. Solo está disponible cuando el método es update.
    • payload: Objeto de carga útil
      • memberships: Array de membresías seleccionadas en la IU al crear el usuario.
      • email: Dirección de correo electrónico del usuario.
      • password: Contraseña del usuario.
      • connection: Nombre de la conexión de base de datos.
      • app_metadata: Datos que se incluyen si un campo personalizado que se está modificando se guarda en app_metadata.
      • user_metadata: Datos que se incluyen si un campo personalizado que se está modificando se guarda en user_metadata.
    • userFields: Array de campos de usuario (si se especifica en la consulta de configuración)
    • method: create o update, según si se llama como resultado de una operación de creación o de actualización.
  • callback(error, user): Callback en el que puedes devolver un error y el objeto de usuario que debe enviarse a la .
Para obtener más información sobre userFields, consulta administración delegada: hook de consulta de configuración.

Ejemplo de uso

Kelly gestiona el departamento de Finanzas. Cuando crea usuarios, estos deben asignarse al departamento de Finanzas como miembros.
function(ctx, callback) {
  var newProfile = {
    email: ctx.payload.email,
    password: ctx.payload.password,
    connection: ctx.payload.connection,
    user_metadata: ctx.payload.user_metadata,
    app_metadata: {
      department: ctx.payload.memberships && ctx.payload.memberships[0],
      ...ctx.payload.app_metadata
    }
  };

  if (!ctx.payload.memberships || ctx.payload.memberships.length === 0) {
    return callback(new Error('The user must be created within a department.'));
  }

  // Obtener el departamento de los metadatos del usuario actual.
  var currentDepartment = ctx.request.user.app_metadata && ctx.request.user.app_metadata.department;
  if (!currentDepartment || !currentDepartment.length) {
    return callback(new Error('The current user is not part of any department.'));
  }

  // Si no perteneces al departamento de IT, solo puedes crear usuarios dentro de tu propio departamento.
  // IT puede crear usuarios en todos los departamentos.
  if (currentDepartment !== 'IT' && ctx.payload.memberships[0] !== currentDepartment) {
    return callback(new Error('You can only create users within your own department.'));
  }

  if (ctx.method === 'update') {
    // Si se actualiza, establecer solo los campos que necesitamos enviar
    Object.keys(newProfile).forEach(function(key) {
      if (newProfile[key] === ctx.request.originalUser[key]) delete newProfile[key];
    });
  }

  // Este es el payload que se enviará a API v2. Tienes control total sobre cómo se crea el usuario en API v2.
  return callback(null, newProfile);
}

Más información