wpcoding.ru wordpress WP Coding

Как создать авторизацию через Telegram в WordPress

В современных проектах на WordPress часто требуется альтернативная авторизация для удобства пользователей. Один из популярных способов — авторизация через Telegram. В этой статье мы подробно разберём, как реализовать такую авторизацию своими силами, без лишних плагинов, с примерами кода и рекомендациями.

Почему стоит использовать авторизацию через Telegram в WordPress

Telegram — это мессенджер с широкой аудиторией и хорошо развитым API. Пользователи часто уже авторизованы в Telegram на своих устройствах, что упрощает вход на сайт без необходимости запоминать отдельные пароли.

Кроме удобства, такой способ повышает безопасность, так как Telegram использует двухфакторную аутентификацию и шифрование сообщений.

Для разработчиков это возможность добавить современный и удобный метод входа, который выделит сайт среди конкурентов.

Как работает авторизация через Telegram: технические детали

Telegram предоставляет виджет Telegram Login Widget, который позволяет получать информацию о пользователе после его авторизации в мессенджере и возвращать эти данные на сайт.

Процесс заключается в следующем:

  • На сайте размещается кнопка Telegram Login.
  • Пользователь нажимает кнопку и подтверждает авторизацию в Telegram.
  • Telegram возвращает объект с данными пользователя (ID, имя, username, фото и т.п.) и контрольную подпись.
  • Сайт проверяет корректность подписи с помощью секретного ключа Telegram бота.
  • Если проверка прошла успешно, пользователь автоматически авторизуется или создаётся новый аккаунт.

Создание Telegram бота и получение токена

Для начала нужно создать Telegram бота, через которого будет осуществляться авторизация:

  1. Откройте Telegram и найдите @BotFather.
  2. Отправьте команду /newbot и следуйте инструкциям по созданию бота.
  3. После создания получите токен — он понадобится для проверки подписи.

Сохраните токен для дальнейшей работы.

Интеграция Telegram Login Widget на сайт WordPress

Добавьте в нужное место шаблона или страницы следующий HTML-код для отображения кнопки входа:

<script async src="https://telegram.org/js/telegram-widget.js?15" data-telegram-login="YourBotUsername" data-size="large" data-userpic="false" data-auth-url="https://wpcoding.ru/wp-json/wpcoding/v1/telegram-auth"></script>

Замените YourBotUsername на имя вашего бота. Параметр data-auth-url указывает на endpoint, который будет принимать данные от Telegram после авторизации.

Создание REST API маршрута для обработки Telegram авторизации

В functions.php вашей темы или в отдельном плагине зарегистрируйте REST API маршрут, который будет обрабатывать данные и выполнять авторизацию пользователя.

add_action('rest_api_init', function () {
    register_rest_route('wpcoding/v1', '/telegram-auth', array(
        'methods' => 'POST',
        'callback' => 'wpcoding_telegram_auth_callback',
        'permission_callback' => '__return_true',
    ));
});

function wpcoding_telegram_auth_callback(WP_REST_Request $request) {
    $data = $request->get_params();

    if (!wpcoding_verify_telegram_data($data)) {
        return new WP_REST_Response(['error' => 'Неверная подпись'], 400);
    }

    $telegram_id = intval($data['id']);
    $user = get_users(array('meta_key' => 'telegram_id', 'meta_value' => $telegram_id));

    if (empty($user)) {
        // Создаем нового пользователя
        $username = sanitize_user($data['username'] ?? 'tguser' . $telegram_id);
        $password = wp_generate_password(12, false);
        $user_id = wp_create_user($username, $password);
        if (is_wp_error($user_id)) {
            return new WP_REST_Response(['error' => 'Ошибка создания пользователя'], 500);
        }
        update_user_meta($user_id, 'telegram_id', $telegram_id);
        $user = get_user_by('id', $user_id);
    } else {
        $user = $user[0];
    }

    // Авторизуем пользователя
    wp_set_current_user($user->ID);
    wp_set_auth_cookie($user->ID);

    return ['success' => true, 'user_id' => $user->ID];
}

function wpcoding_verify_telegram_data($data) {
    $token = 'ВАШ_ТОКЕН_БОТА'; // замените на токен вашего бота
    $check_hash = $data['hash'];
    unset($data['hash']);

    $data_check_arr = [];
    foreach ($data as $key => $value) {
        $data_check_arr[] = $key . '=' . $value;
    }
    sort($data_check_arr);
    $data_check_string = implode("\n", $data_check_arr);

    $secret_key = hash('sha256', $token, true);
    $hash = hash_hmac('sha256', $data_check_string, $secret_key);

    return hash_equals($hash, $check_hash);
}

Разбор кода: проверка подписи и авторизация пользователя

Функция wpcoding_verify_telegram_data проверяет, что данные действительно пришли от Telegram, сравнивая хэш подписи с вычисленным по секретному ключу бота. Это важный этап безопасности.

В функции обратного вызова wpcoding_telegram_auth_callback сначала происходит проверка подписи, затем поиск пользователя по telegram_id. Если пользователь не найден, создаётся новый аккаунт с уникальным именем.

В конце происходит авторизация пользователя в WordPress через wp_set_auth_cookie и wp_set_current_user, что позволяет автоматически войти на сайт.

Советы по безопасности и доработке

Обязательно храните токен бота в безопасном месте, лучше в настройках плагина либо в файле конфигурации вне публичных папок.

Для улучшения UX можно добавить обработку ошибок на клиентской стороне и уведомления пользователю при неуспешной авторизации.

Если нужна интеграция с ролями и правами, то в момент создания пользователя можно назначать нужные роли, например:

wp_update_user(array(
    'ID' => $user_id,
    'role' => 'subscriber'
));

Также можно расширить профиль пользователя дополнительными данными из Telegram, например, фото или именем.

Пример готового плагина для авторизации через Telegram

Для быстрой интеграции вы можете использовать готовые плагины, например, Expert Review с поддержкой кастомных методов авторизации или создать свой по примеру выше.

Создание собственного решения даёт гибкость и контроль, но если нужно быстро, можно рассмотреть и плагины из каталога WordPress.

Выводы

Авторизация через Telegram — современный и удобный способ входа в WordPress, который можно реализовать самостоятельно с помощью Telegram Login Widget и REST API. Такой подход повышает удобство пользователей и безопасность, а также расширяет функционал сайта без лишних зависимостей.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше