Saltar al contenido principal
Los metadatos de transacción de Actions permiten almacenar, acceder y/o compartir metadatos personalizados dentro de una Action de post-login durante una transacción. Anteriormente, cada Action funcionaba de forma independiente, lo que dificultaba pasar información entre ellas. Con los metadatos de transacción de Actions, ahora es posible:
  • Compartir datos entre Actions, como respuestas de API o cálculos intermedios.
  • Evitar tener que volver a obtener o recalcular la misma información en distintas Actions.
Antes de usar metadatos de transacción durante el desarrollo, te recomendamos revisar las limitaciones. Para obtener más información, consulta Limitaciones de Actions.

Cómo funciona

Use el objeto API de post-login api.transaction.setMetadata para establecer el par clave-valor y almacenar metadatos de la transacción. Use el objeto Event de post-login event.transaction.metadata para acceder al par clave-valor almacenado en la misma Action o en Actions posteriores del trigger de post-login durante una sola ejecución. Los objetos API y Event aceptan los siguientes parámetros:
ValorTipoDescripción
KeyStringLa clave de la propiedad de metadatos que se va a establecer.
ValueString, Number, BooleanEl valor de la propiedad de metadatos.
Si se establece en null, la propiedad se elimina.
Para obtener más información sobre cómo escribir Actions, lea Escriba su primera Action.

Latencia

El uso de metadatos de transacción de Actions podría añadir una latencia mínima. Esa latencia sería proporcional al tamaño de la carga útil de los metadatos y sería relevante cuando se produzcan suspensiones de Actions. Por ejemplo, activar , redirigir desde Actions o renderizar Forms podría causar problemas de latencia debido a la necesidad de volver a cargar datos desde el almacenamiento. Aun así, la latencia potencial debería ser menor que la de las solicitudes HTTP salientes redundantes necesarias para recuperar los datos que requiere la secuencia de Actions.

Ejemplos

Accede a los metadatos de inmediato

Establece pares clave-valor en los metadatos de la transacción y accede a los valores de inmediato.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('hello', 'Auth0');

  console.log('Hello ', event.transaction?.metadata?.hello);
  /* Muestra "Hello Auth0" */
};

Establecer valores admitidos

Establezca valores de tipo string, number y boolean.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('string_value', 'Auth0');
  api.transaction.setMetadata('boolean_value', true);
  api.transaction.setMetadata('number_value', 12);

  console.log('string_value', event.transaction?.metadata?.string_value);
  /* Muestra "string_value Auth0" */
  console.log('boolean_value', event.transaction?.metadata?.boolean_value);
  /* Muestra "boolean_value true" */
  console.log('number_value', event.transaction?.metadata?.number_value);
  /* Muestra "number_value 12" */
};

Serializar valores

Serialice los valores como strings dentro de los límites.
No puede establecer valores de tipo object ni array, pero puede serializarlos como strings.
exports.onExecutePostLogin = async (event, api) => {
  const serialized_object_value = JSON.stringify({
    string_value: 'Auth0',
    boolean_value: true,
    number_value: 12
  });

  api.transaction.setMetadata('serialized_object_value', serialized_object_value);

  const serialized_array_value = JSON.stringify([
    'Auth0',
    true,
    12
  ]);
  api.transaction.setMetadata('serialized_array_value', serialized_array_value);

  console.log('serialized_object_value',
    JSON.parse(event.transaction?.metadata?.serialized_object_value)
  );
  /* Muestra "serialized_object_value { string_value: 'Auth0', boolean_value: true, number_value: 12 }" */

  console.log('serialized_array_value',
    JSON.parse(event.transaction?.metadata?.serialized_array_value)
  );
  /* Muestra "serialized_array_value [ 'Auth0', true, 12 ]" */
};

Compartir valores entre Actions

Comparta pares clave-valor entre Actions en la misma secuencia de ejecución. Action 1 Establezca la clave hello con el valor Auth0 mediante el método setMetadata del objeto api.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('hello', 'Auth0');
};
Action 2 Registra el valor de Auth0 para la clave hello en los metadatos de la transacción y usa la propiedad transaction.metadata del objeto event para acceder a los valores establecidos.
exports.onExecutePostLogin = async (event, api) => {
  console.log('Hello', event.transaction?.metadata?.hello);
  /* Muestra "Hello Auth0" */
};

Actualizar metadatos

Asigne un valor distinto a una clave existente para actualizar los metadatos. Action 1 Establezca el par clave-valor de metadatos de la transacción en custom_tx_id y xyz123.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('custom_tx_id', 'xyz123');
};
Action 2 Registre la clave como custom_tx_id y el valor como xyz123. Luego, establezca custom_tx_id en abc456 para volver a registrarlo con el valor más reciente de custom_tx_id en los metadatos de la transacción.
exports.onExecutePostLogin = async (event, api) => {
  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id xyz123" */

  api.transaction.setMetadata('custom_tx_id', 'abc456');

  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id abc456" */
};
Action 3 Registre el valor abc456 en custom_tx_id.
exports.onExecutePostLogin = async (event, api) => {
  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id abc456" */
};

Eliminar metadatos

Elimine los valores de los metadatos de la transacción asignando null al valor de cada clave concreta. Action 1 Establezca custom_tx_id en los metadatos de la transacción.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('custom_tx_id', 'xyz123');
};
Action 2 Establece custom_tx_id en null y registra ese valor null para custom_tx_id.
exports.onExecutePostLogin = async (event, api) => {
  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id xyz123" */

  api.transaction.setMetadata('custom_tx_id', null);

  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id undefined" */
};
Action 3 Registra el valor null de custom_tx_id.
exports.onExecutePostLogin = async (event, api) => {
  console.log('custom_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id undefined" */
};

Conservar valores al redirigir a sitios externos

Conserve los metadatos de la transacción durante las redirecciones. Los valores estarán disponibles cuando los usuarios continúen el flujo de autenticación. Action 1 Establece un custom_tx_id en los metadatos de la transacción.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('custom_tx_id', 'xyz123');
};
Action 2 Redirige a un sitio externo y envía un token con el custom_tx_id de los metadatos de la transacción. Luego compara el valor de custom_tx_id en los metadatos de la transacción con el que se envió al sitio externo y que se devolvió en la carga útil de otro token.
exports.onExecutePostLogin = async (event, api) => {
  const token = api.redirect.encodeToken({
    secret: event.secrets.REDIRECT_SECRET,
    expiresInSeconds: 60, 
    payload: {
      custom_tx_id: event.transaction?.metadata?.custom_tx_id,
      continue_uri: `https://${event.secrets.TENANT_DOMAIN}/continue`
    },
  });

  api.redirect.sendUserTo(event.secrets.REDIRECT_URL, {
    query: { session_token: token }
  });
};

exports.onContinuePostLogin = async (event, api) => {
  const payload = api.redirect.validateToken({
    secret: event.secrets.REDIRECT_SECRET
  });

  console.log('Does custon_tx_id match?',
    payload?.custom_tx_id === event.transaction?.metadata?.custom_tx_id
  );
  /* Muestra "Does custon_tx_id match? True" */
};

Conservar valores al renderizar Forms

Con Renderizar Forms con Actions, los valores de los metadatos de la transacción se conservarán y seguirán estando disponibles cuando los usuarios continúen con el flujo de autenticación. Para obtener más información sobre cómo usar Forms con Actions, consulte Renderizar Forms con Actions. Action 1 Establece un custom_tx_id en los metadatos de la transacción.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('custom_tx_id', 'xyz123');
};
Action 2 Muestra un Form. Luego registra el custom_tx_id que se conservó cuando continúa la ejecución de Actions.
exports.onExecutePostLogin = async (event, api) => {
  api.prompt.render(event.secrets.FORM_ID);
};

exports.onContinuePostLogin = async (event, api) => {
  console.log('custon_tx_id', event.transaction?.metadata?.custom_tx_id);
  /* Muestra "custom_tx_id xyz123" */
};

Compartir valores con Forms

Puedes renderizar Forms con Actions y pasar valores de los metadatos de la transacción al Form. Action 1 Establece un custom_tx_id en los metadatos de la transacción.
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.setMetadata('custom_tx_id', 'xyz123');
};
Action 2 Renderiza un Form pasando el custom_tx_id de los metadatos de la transacción como parámetro vars. Luego, al continuar la ejecución de Actions, compara el valor de custom_tx_id en los metadatos de la transacción con el que se pasó al Form.
exports.onExecutePostLogin = async (event, api) => {
  api.prompt.render(event.secrets.FORM_ID, {
    vars: {
      custom_tx_id: event.transaction?.metadata?.custom_tx_id
    }
  });
};

exports.onContinuePostLogin = async (event, api) => {
  console.log('Does custon_tx_id match?',
    event.prompt?.vars?.custom_tx_id === event.transaction?.metadata?.custom_tx_id
  );
  /* Muestra "Does custon_tx_id match? True" */
};