Skip to main content

isUserOnboardingComplete

Checks if the user has completed all onboarding requirements including KYC fields and MFA setup. This function verifies whether a user has fulfilled all necessary requirements to be considered fully onboarded:
  • KYC Fields: All required Know Your Customer information fields have been provided
  • MFA Authentication: User has completed any required multi-factor authentication challenges
  • Recovery Codes: User has acknowledged their MFA recovery codes (if MFA is enabled)
Use this function to determine if you should direct users to complete additional onboarding steps or allow them full access to your application.

Usage

import { isUserOnboardingComplete } from '@dynamic-labs-sdk/client';

const checkUserStatus = () => {
  const isComplete = isUserOnboardingComplete();

  if (isComplete) {
    console.log('User has completed all onboarding requirements');
  } else {
    console.log('User has pending onboarding requirements');
  }
};

Parameters

ParameterTypeDescription
clientDynamicClient (optional)The Dynamic client instance. Only required when using multiple clients.

Returns

boolean - Returns true if onboarding is complete (no pending requirements), false if there are pending requirements.

Examples

Basic onboarding check

import { isUserOnboardingComplete } from '@dynamic-labs-sdk/client';

const handlePostLogin = () => {
  const isComplete = isUserOnboardingComplete();

  if (!isComplete) {
    // Redirect to onboarding flow
    redirectToOnboarding();
  } else {
    // Allow access to main application
    redirectToDashboard();
  }
};

Checking specific requirements

If you need to know which specific requirements are pending, you can check each requirement individually:
import {
  isUserOnboardingComplete,
  isUserMissingMfaAuth,
  isPendingRecoveryCodesAcknowledgment,
  getDefaultClient
} from '@dynamic-labs-sdk/client';

const checkOnboardingDetails = () => {
  const client = getDefaultClient();
  const user = client.user;

  if (!user) {
    console.log('User not logged in');
    return;
  }

  const isComplete = isUserOnboardingComplete();

  if (!isComplete) {
    // Check individual requirements
    const hasMissingKycFields = Boolean(user.missingFields?.length);
    const needsMfaAuth = isUserMissingMfaAuth();
    const needsRecoveryAcknowledgment = isPendingRecoveryCodesAcknowledgment();

    if (hasMissingKycFields) {
      console.log('User needs to complete KYC fields:', user.missingFields);
    }

    if (needsMfaAuth) {
      console.log('User needs to complete MFA authentication');
    }

    if (needsRecoveryAcknowledgment) {
      console.log('User needs to acknowledge recovery codes');
    }
  }
};

Listen for user changes and check onboarding

import {
  isUserOnboardingComplete,
  onEvent
} from '@dynamic-labs-sdk/client';

// Listen for user changes and check onboarding status
onEvent({
  event: 'userChanged',
  listener: ({ user }) => {
    if (!user) return;

    const isComplete = isUserOnboardingComplete();
    console.log('Onboarding complete:', isComplete);

    if (isComplete) {
      // User completed all requirements, update UI
      showFullAccess();
    } else {
      // Show onboarding prompt
      showOnboardingPrompt();
    }
  },
});

Conditional feature access

import { isUserOnboardingComplete } from '@dynamic-labs-sdk/client';

const renderFeature = () => {
  const canAccessFeature = isUserOnboardingComplete();

  if (!canAccessFeature) {
    return (
      <div>
        <p>Complete your onboarding to access this feature</p>
        <button onClick={redirectToOnboarding}>
          Complete Onboarding
        </button>
      </div>
    );
  }

  return <FullFeatureAccess />;
};

What does this check?

The function returns true only when all of the following conditions are met:
  1. No Missing KYC Fields: user.missingFields is empty or undefined
  2. No Pending MFA Authentication: User doesn’t have the requiresAdditionalAuth scope
  3. Recovery Codes Acknowledged: If MFA is enabled, user has acknowledged their recovery codes
If any of these requirements are pending, the function returns false.