Автор: Khilinski 2024-10-14

Двухфакторная аутентификация

Хотя двухфакторную аутентификацию можно легко добавить через плагины, её можно реализовать и через код. Это добавит дополнительный уровень защиты при входе в админ-панель.


function two_factor_auth_login($user_login, $user) {
    if (get_user_meta($user->ID, 'two_factor_auth_enabled', true)) {
        // Генерация и отправка кода на email
        $code = rand(100000, 999999);
        update_user_meta($user->ID, 'two_factor_code', $code);
        wp_mail($user->user_email, 'Ваш код для входа', 'Ваш код: ' . $code);

        // Перенаправляем на страницу ввода кода
        wp_redirect(home_url('/enter-2fa-code'));
        exit;
    }
}
add_action('wp_login', 'two_factor_auth_login', 10, 2);

// Проверка кода 2FA
function verify_two_factor_code() {
    if (isset($_POST['two_factor_code'])) {
        $user_id = get_current_user_id();
        $correct_code = get_user_meta($user_id, 'two_factor_code', true);

        if ($_POST['two_factor_code'] == $correct_code) {
            // Успешная аутентификация
            delete_user_meta($user_id, 'two_factor_code');
        } else {
            // Неверный код
            wp_logout();
            wp_die('Неверный код. Попробуйте снова.');
        }
    }
}
add_action('init', 'verify_two_factor_code');


    Что делает этот код?
  • После ввода логина и пароля пользователь получает одноразовый код на email, который нужно ввести для завершения входа.
  • Проверяет правильность введённого кода и завершает процесс аутентификации.

Весь код находится в github.