WooCommerce: как реализовать авторизацию пользователя через REST API

В чем суть задачи: авторизация через REST API в WooCommerce

WooCommerce базируется на WordPress, и стандартный REST API WordPress не содержит готового метода для авторизации пользователей. При разработке мобильных приложений, SPA или интеграций часто возникает необходимость авторизовать пользователя и получить токен для дальнейших запросов. В этой статье разберем, как реализовать собственный endpoint REST API для авторизации пользователя WooCommerce с возвращением JWT токена.

Диагностика проблемы: почему стандартный REST API не подходит

WordPress REST API по умолчанию позволяет получать данные, создавать записи, но не содержит метода для входа пользователя и получения токена аутентификации. WooCommerce расширяет API товарами и заказами, но не содержит механизма авторизации по API. Без собственной реализации невозможно безопасно аутентифицировать пользователя по логину и паролю через API.

Что происходит при попытке авторизоваться стандартными методами

  • Попытка передать логин и пароль в теле запроса к /wp-json/wp/v2/users приводит к ошибке 401 Unauthorized.
  • Использование Basic Auth требует передачи пароля в каждом запросе, что небезопасно.
  • OAuth и cookie аутентификация работают только для браузерных сессий, не подходят для внешних приложений.

Пошаговое решение: создание REST API для авторизации с JWT

Шаг 1. Установка и настройка JWT Authentication for WP REST API

Самый популярный способ — использовать плагин JWT Authentication for WP REST API. После установки и активации добавьте в wp-config.php секретный ключ:

define('JWT_AUTH_SECRET_KEY', 'ваш_сложный_секретный_ключ_не_меньше_32_символов');

Обязательно выберите длинный и случайный ключ.

Шаг 2. Создание собственного REST endpoint для логина

Добавим кастомный endpoint, который будет принимать логин и пароль, и возвращать JWT токен:

add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/login', [
        'methods'  => 'POST',
        'callback' => 'custom_api_user_login',
        'permission_callback' => '__return_true',
    ]);
});

function custom_api_user_login(WP_REST_Request $request) {
    $username = $request->get_param('username');
    $password = $request->get_param('password');

    if (empty($username) || empty($password)) {
        return new WP_Error('missing_data', 'Username or password is missing', ['status' => 400]);
    }

    $user = wp_authenticate($username, $password);
    if (is_wp_error($user)) {
        return new WP_Error('invalid_credentials', 'Invalid username or password', ['status' => 403]);
    }

    // Генерируем JWT токен
    $token = generate_jwt_token($user->ID);
    return [
        'token' => $token,
        'user_id' => $user->ID,
        'username' => $user->user_login
    ];
}

function generate_jwt_token($user_id) {
    $issued_at = time();
    $expiration = $issued_at + (DAY_IN_SECONDS * 7); // токен валиден 7 дней

    $payload = [
        'iat' => $issued_at,
        'exp' => $expiration,
        'data' => ['user_id' => $user_id],
    ];

    $secret_key = defined('JWT_AUTH_SECRET_KEY') ? JWT_AUTH_SECRET_KEY : 'default_secret';
    return JWT::encode($payload, $secret_key);
}

В этом примере функция generate_jwt_token использует библиотеку JWT (например, firebase/php-jwt), которую нужно подключить через composer или вручную.

Шаг 3. Проверка токена при последующих запросах

Чтобы защитить другие REST API методы, необходимо настроить проверку JWT токена в заголовке Authorization: Bearer {token}. Плагин JWT Authentication for WP REST API автоматически реализует такую проверку, если активирован и настроен.

Проверка результата после внедрения

1. Отправьте POST-запрос к /wp-json/custom/v1/login с JSON телом:

{
  "username": "user",
  "password": "password"
}

2. Если данные верны, получите ответ с токеном:

{
  "token": "eyJ0eXAiOiJKV1QiLCJh...",
  "user_id": 123,
  "username": "user"
}

3. Для теста вызовите защищенный метод с заголовком:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJh...

Если все настроено правильно, запрос будет успешно выполнен.

Частые ошибки и как их исправить

  • Ошибка 403 при логине: проверьте правильность логина и пароля, а также что функция wp_authenticate вызывается корректно.
  • JWT токен не генерируется: убедитесь, что вы подключили библиотеку JWT и правильно задаете секретный ключ в wp-config.php.
  • Плагин JWT Authentication не активирован или не настроен: без него плагин не сможет валидировать токен в последующих запросах.
  • Проблемы с CORS: если делаете запросы из браузера, настройте правильные CORS заголовки на сервере.

Практические советы по безопасности и производительности

  • Используйте HTTPS для всех API запросов, чтобы защитить логин и пароль.
  • Не храните токен слишком долго, используйте разумный срок жизни (7 дней или меньше).
  • Храните секретный ключ вне публичного доступа и регулярно обновляйте его при подозрениях на компрометацию.
  • Ограничьте количество попыток входа через API, чтобы избежать brute force атак.
  • Для WooCommerce API используйте отдельные ключи и права доступа, не передавайте учетные данные администратора.

Сравнение вариантов реализации авторизации через REST API

ВариантОписаниеПлюсыМинусы
Плагин JWT AuthenticationИспользование готового плагина для генерации и проверки JWT токеновБыстрая интеграция, поддержка токенов, безопасностьЗависимость от стороннего плагина, настройка секретного ключа
Basic AuthПередача логина и пароля в каждом запросеПростота реализацииНизкая безопасность, требует HTTPS
OAuth 1.0a WooCommerceСтандартная авторизация WooCommerce REST API через OAuthБезопасно, официально поддерживаетсяСложность настройки, менее удобно для мобильных клиентов
WooCommerce: автоматическое удаление неактивных вариаций товаров
10.06.2026
Как создать настройки плагина в WordPress
16.11.2025
Как создать уникальный тип записи в WordPress с поддержкой метаданных
14.12.2025
Как создать автоматические уведомления о новых отзывах в WordPress
31.03.2026
WooCommerce: автоматическое изменение цен и скидок при импорте продуктов
10.05.2026

Плагин службы технической поддержки для WordPress. Создание, просмотр и ответ на тикеты. Уведомление пользователей и другие функции.