WooCommerce: как добавить авторизацию заказчиков через социальные сети без плагинов

Диагностика задачи: зачем нужна авторизация через соцсети в WooCommerce

Авторизация через социальные сети в WooCommerce позволяет упростить процесс входа для пользователей, повысить конверсию регистрации и улучшить пользовательский опыт. При этом многие ищут решение без использования тяжеловесных плагинов, которые могут замедлять сайт или вносить ненужные зависимости.

Основная проблема в реализации — правильно интегрировать OAuth 2.0 авторизацию популярных соцсетей (например, Google и Facebook) и связать полученные данные с аккаунтами WooCommerce, чтобы корректно создавать или находить пользователя.

Подключение Google OAuth 2.0 для авторизации WooCommerce без плагинов

1. Регистрация приложения в Google API Console

Для начала нужно создать OAuth 2.0 клиент в Google API Console:

  • Перейдите на Google API Console.
  • Создайте проект и выберите «OAuth client ID».
  • Укажите тип «Web application».
  • Добавьте URI перенаправления: например, https://ваш_сайт.ru/google-callback.
  • Запишите Client ID и Client Secret.

2. Создание маршрута для callback и генерация ссылки на вход

Добавьте в файл functions.php темы следующий код для обработки входа и callback:

add_action('init', 'google_oauth_start');
function google_oauth_start() {
    if (isset($_GET['google_login'])) {
        $client_id = 'ВАШ_CLIENT_ID';
        $redirect_uri = home_url('/google-callback');
        $scope = 'email profile';
        $auth_url = 'https://accounts.google.com/o/oauth2/v2/auth?response_type=code'
            . '&client_id=' . urlencode($client_id)
            . '&redirect_uri=' . urlencode($redirect_uri)
            . '&scope=' . urlencode($scope)
            . '&access_type=online'
            . '&prompt=select_account';
        wp_redirect($auth_url);
        exit;
    }
}

add_action('init', 'google_oauth_callback');
function google_oauth_callback() {
    if (strpos($_SERVER['REQUEST_URI'], '/google-callback') !== false && isset($_GET['code'])) {
        $code = sanitize_text_field($_GET['code']);
        $client_id = 'ВАШ_CLIENT_ID';
        $client_secret = 'ВАШ_CLIENT_SECRET';
        $redirect_uri = home_url('/google-callback');

        $response = wp_remote_post('https://oauth2.googleapis.com/token', [
            'body' => [
                'code' => $code,
                'client_id' => $client_id,
                'client_secret' => $client_secret,
                'redirect_uri' => $redirect_uri,
                'grant_type' => 'authorization_code',
            ]
        ]);

        if (is_wp_error($response)) {
            wp_die('Ошибка запроса токена');
        }

        $body = json_decode(wp_remote_retrieve_body($response), true);
        if (empty($body['access_token'])) {
            wp_die('Токен не получен');
        }

        $access_token = $body['access_token'];
        $user_info_response = wp_remote_get('https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=' . $access_token);
        if (is_wp_error($user_info_response)) {
            wp_die('Ошибка получения данных пользователя');
        }

        $user_info = json_decode(wp_remote_retrieve_body($user_info_response), true);
        if (empty($user_info['email'])) {
            wp_die('Email не получен');
        }

        // Поиск пользователя по email
        $user = get_user_by('email', $user_info['email']);

        if (!$user) {
            // Создаем нового пользователя
            $username = sanitize_user(current(explode('@', $user_info['email'])));
            $password = wp_generate_password();
            $user_id = wp_create_user($username, $password, $user_info['email']);
            if (is_wp_error($user_id)) {
                wp_die('Ошибка создания пользователя');
            }
            $user = get_user_by('id', $user_id);
        }

        // Авторизация пользователя
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);
        wp_redirect(home_url());
        exit;
    }
}

3. Добавление кнопки входа

В нужном месте (например, в шаблоне входа) добавьте ссылку для запуска авторизации:

<a href="?google_login=1" class="button google-login-button">Войти через Google</a>

Авторизация через Facebook: базовая схема без плагинов

Принцип аналогичный Google, но с Facebook OAuth API. Основные шаги:

  • Создать приложение в Facebook Developer Console.
  • Получить App ID и App Secret.
  • Создать обработчик callback с получением access_token через /oauth/access_token.
  • Запросить данные пользователя через Graph API по access_token.
  • Найти или создать пользователя в WordPress по email.
  • Авторизовать пользователя.

Пример запроса access_token и user info:

$response = wp_remote_get('https://graph.facebook.com/v12.0/oauth/access_token?client_id=' . $app_id . '&redirect_uri=' . urlencode($redirect_uri) . '&client_secret=' . $app_secret . '&code=' . $code);

$user_info = wp_remote_get('https://graph.facebook.com/me?fields=id,name,email&access_token=' . $access_token);

Проверка результата

  • Кликните на кнопку «Войти через Google» или аналогичную Facebook.
  • Должно открыться окно авторизации выбранной соцсети.
  • После успешного входа вы должны быть перенаправлены обратно на сайт.
  • Проверьте, что пользователь создан или найден в базе WordPress (в разделе «Пользователи»).
  • После авторизации вы должны быть автоматически залогинены (можно проверить через is_user_logged_in()).

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

  • Ошибка 400 при получении токена: проверьте точное совпадение URI перенаправления в настройках соцсети и в коде.
  • Пользователь не создается: убедитесь, что email приходит из соцсети, иначе создайте уникальное имя пользователя вручную.
  • Редирект зацикливается: убедитесь, что callback корректно обрабатывает параметр code и не вызывает wp_redirect без условий.
  • HTTPS необходим: OAuth требует защищенного соединения, настройте SSL для сайта.

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

  • Храните Client Secret вне публичных файлов, например, в wp-config.php или через переменные окружения.
  • Добавьте проверку nonce или сессию для защиты от CSRF-атак при старте авторизации.
  • Кешируйте токены в transient для повторного использования при необходимости.
  • Используйте HTTPS для всех OAuth запросов и возвратов.

Сравнение вариантов интеграции авторизации через соцсети

МетодПлюсыМинусыПрименимость
Плагины (например, Nextend Social Login)Быстро, поддержка многих соцсетей, обновленияВес, нагрузка, зависимостьБыстрый запуск, без кастомизации
Своя реализация через OAuth 2.0Легковесно, гибко, полный контрольСложность настройки, поддержкаОпытные разработчики, кастомные задачи
Использование внешних сервисов (Auth0, Firebase)Многофункциональность, безопасностьСтоимость, сложность интеграцииПроекты с масштабированием
Как настроить автоматическое удаление старого контента в WordPress
02.04.2026
WooCommerce: автоматическое изменение стоимости товаров по расписанию
29.05.2026
Как использовать WPRemark для автоматического модерирования комментариев в WordPress
17.12.2025
Как настроить автообновления плагинов WordPress без риска поломок
17.02.2026
Как использовать WordPress hooks для автоматизации задач
12.11.2025