Last updated on September 25, 2023

Enable Two-Factor Authentication for Login

Don’t know where to add this snippet? Read our guide: How to add code snippets.

Enable two-factor authentication.

Enabling two-factor authentication for login adds an extra layer of security to your WordPress website. It requires users to provide a second form of verification, such as a code sent to their mobile device, in addition to their username and password. This helps prevent unauthorized access even if someone manages to obtain the login credentials.

To enable two-factor authentication for login in WordPress, you can use a plugin called “Two Factor Authentication.” Here’s an example of how to implement it:

/**
 * Enable Two-Factor Authentication for Login.
 */
function wpsnippets_enable_two_factor_authentication() {
    // Check if the Two Factor Authentication plugin is active.
    if (class_exists('Two_Factor')) {
        // Enable Two Factor Authentication for all users.
        add_filter('two_factor_providers', function ($providers) {
            $providers['time_based_one_time_password'] = array(
                'label' => 'Time-based One-Time Password',
                'description' => 'Use a time-based one-time password for two-factor authentication.',
                'callback' => 'wpsnippets_generate_time_based_one_time_password',
            );
            return $providers;
        });

        // Generate a time-based one-time password.
        function wpsnippets_generate_time_based_one_time_password($user_id) {
            $secret = 'your_secret_key'; // Replace with your own secret key.
            $otp = new OTPTOTP($secret);
            return $otp->now();
        }
    }
}
add_action('init', 'wpsnippets_enable_two_factor_authentication');

In this code example, we first check if the “Two Factor Authentication” plugin is active by verifying if the Two_Factor class exists. If it does, we proceed to enable two-factor authentication for all users by adding a filter to the two_factor_providers hook.

Inside the filter callback, we add a new provider called “Time-based One-Time Password” and specify a callback function wpsnippets_generate_time_based_one_time_password to generate the one-time password.

The wpsnippets_generate_time_based_one_time_password function uses the OTPTOTP class to generate a time-based one-time password. You’ll need to replace 'your_secret_key' with your own secret key. This secret key should be securely stored and unique for each user.

Once you’ve added this code to your theme’s functions.php file or a custom plugin, two-factor authentication will be enabled for all users, and they will be prompted to enter a time-based one-time password during login.

Examples

Example 1: Enable Two-Factor Authentication using a Plugin

This example demonstrates how to enable two-factor authentication for login by using a plugin called “Two-Factor”. The plugin provides various authentication methods, including email, time-based one-time password (TOTP), and more.

// Enable Two-Factor Authentication using the "Two-Factor" plugin
add_filter( 'two_factor_providers', 'wpsnippets_enable_two_factor_authentication' );
function wpsnippets_enable_two_factor_authentication( $providers ) {
    $providers['email'] = array(
        'label' => 'Email',
        'description' => 'Receive a one-time login code via email.',
        'callback' => 'wpsnippets_two_factor_email_callback',
    );

    $providers['totp'] = array(
        'label' => 'Authenticator App',
        'description' => 'Use a time-based one-time password (TOTP) generated by an authenticator app.',
        'callback' => 'wpsnippets_two_factor_totp_callback',
    );

    return $providers;
}

function wpsnippets_two_factor_email_callback() {
    // Code to send a one-time login code via email
}

function wpsnippets_two_factor_totp_callback() {
    // Code to generate and verify a time-based one-time password (TOTP)
}

Explanation: This code adds two-factor authentication support to the login process by using the “Two-Factor” plugin. The two_factor_providers filter is used to add two authentication methods: email and time-based one-time password (TOTP). The callback functions wpsnippets_two_factor_email_callback and wpsnippets_two_factor_totp_callback are responsible for handling the authentication process for each method.

Example 2: Enable Two-Factor Authentication using a Custom Function

This example demonstrates how to enable two-factor authentication for login by using a custom function. In this case, we’ll use a simple SMS-based authentication method.

// Enable Two-Factor Authentication using a custom function
add_filter( 'two_factor_providers', 'wpsnippets_enable_two_factor_authentication' );
function wpsnippets_enable_two_factor_authentication( $providers ) {
    $providers['sms'] = array(
        'label' => 'SMS',
        'description' => 'Receive a one-time login code via SMS.',
        'callback' => 'wpsnippets_two_factor_sms_callback',
    );

    return $providers;
}

function wpsnippets_two_factor_sms_callback() {
    // Code to send a one-time login code via SMS
}

Explanation: This code adds a custom two-factor authentication method called “SMS” to the login process. The two_factor_providers filter is used to add the authentication method, and the callback function wpsnippets_two_factor_sms_callback is responsible for sending the one-time login code via SMS.

Example 3: Enable Two-Factor Authentication using a Third-Party Service

This example demonstrates how to enable two-factor authentication for login by integrating with a third-party service called “Authy”. Authy provides a secure and convenient way to implement two-factor authentication.

// Enable Two-Factor Authentication using a third-party service (Authy)
add_filter( 'two_factor_providers', 'wpsnippets_enable_two_factor_authentication' );
function wpsnippets_enable_two_factor_authentication( $providers ) {
    $providers['authy'] = array(
        'label' => 'Authy',
        'description' => 'Use the Authy app for two-factor authentication.',
        'callback' => 'wpsnippets_two_factor_authy_callback',
    );

    return $providers;
}

function wpsnippets_two_factor_authy_callback() {
    // Code to integrate with the Authy API for two-factor authentication
}

Explanation: This code adds a two-factor authentication method called “Authy” by integrating with the Authy service. The two_factor_providers filter is used to add the authentication method, and the callback function wpsnippets_two_factor_authy_callback is responsible for integrating with the Authy API to handle the two-factor authentication process.

Last updated on September 25, 2023. Originally posted on October 5, 2023.

Leave a Reply