メインコンテンツへスキップ
Pre-user Registration トリガーは、Database または 接続でユーザーが作成される前に実行されます。
Actions の Pre User Registration フローを示す図。
このフロー内の Actions はブロッキング (同期) です。つまり、トリガーの処理の一部として実行され、Action が完了するまで Auth0 パイプラインの残りの処理は実行されません。

トリガー

Pre-user Registration

pre-user-registration トリガーは、ユーザーが Database 接続またはパスワードレス接続で登録を試みると実行されます。このトリガーを使用すると、ユーザープロフィールが作成される前にメタデータを追加したり、カスタムロジックで登録を拒否したりできます。
現在、pre-user-registration Actions を使用してパスワードレスユーザーにメタデータを追加することはできません。

参照

よくあるユースケース

所在地に基づいて登録を拒否する

Pre-User Registration Action を使用すると、ユーザーによるサインアップを防止できます。
/**
 * @param {Event} event - 登録イベントの詳細。
 * @param {PreUserRegistrationAPI} api
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  if (event.request.geoip.continentCode === "NA") {

    // エラーメッセージをローカライズする 
    const LOCALIZED_MESSAGES = {
      en: 'You are not allowed to register.',
      es: 'No tienes permitido registrarte.'
    };

    const userMessage = LOCALIZED_MESSAGES[event.request.language] || LOCALIZED_MESSAGES['en'];
    api.access.deny('no_signups_from_north_america', userMessage);
  }
};

ユーザープロフィールにメタデータを設定する

Pre-User Registration Action を使用すると、ユーザープロフィールの作成前にメタデータを追加できます。
現時点では、pre-user-registration Actions を使用してパスワードレスユーザーにメタデータを追加することはできません。
/**
 * @param {Event} event - 登録イベントの詳細。
 * @param {PreUserRegistrationAPI} api
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  api.user.setUserMetadata("screen_name", "username");  
};

別のシステムのユーザー ID をユーザープロフィールに保存する

Pre-User Registration Action を使用すると、別のシステムのユーザー ID をユーザープロフィールに保存できます。
const axios = require('axios');

const REQUEST_TIMEOUT = 2000; // タイムアウトの例

/**
* PreUserRegistration フローの実行中に呼び出されるハンドラー。
*
* @param {Event} event - 登録しようとしているユーザーとそのコンテキストに関する詳細。
* @param {PreUserRegistrationAPI} api - サインアップの動作を変更するために使用できるメソッドを持つインターフェース。
*/
exports.onExecutePreUserRegistration = async (event, api) => {
  try {
    // シークレット USER_SERVICE_URL = 'https://yourservice.com' を設定する
    const remoteUser = await axios.get(event.secrets.USER_SERVICE_URL, {
      timeout: REQUEST_TIMEOUT,
      params: {
        email: event.user.email 
      }
    });

    if (remoteUser) {
      api.user.setAppMetadata('my-api-user-id', remoteUser.id); 
    }
  } catch (err) {
    api.validation.error('custom_error', 'Custom Error');
  }
};
axios のような npm ライブラリを使用するには、そのライブラリを依存関係として Action に追加する必要があります。詳細については、Write Your First Action の「依存関係を追加する」セクションを参照してください。

特定の JA3/JA4 フィンガープリントからのアクセスを拒否する

event.security_context オブジェクトには、現在のトランザクションに対応する JA3/JA4 フィンガープリント値が含まれています。
exports.onExecutePreUserRegistration = async (event, api) => {
  const clientJa4 = event?.security_context?.ja4;
  console.log('[ACTION]', {clientJa4});
  const badFingerprints = ['t13d1517h2_8daaf6152771_b6f405a00624','t13d1516h2_8daaf6152771_d8a2da3f94cd'];
  if (clientJa4 && badFingerprints.includes(clientJa4)){
    api.access.deny('suspicious_tls_fingerprint', 'Your TLS fingerprint has been flagged as suspicious');
  }
};