Плагин HybridAuth V3.13 для Cotonti CMF
HybridAuth — это плагин 2026 года для Cotonti Siena/Verona, который позволяет пользователям регистрироваться и входить на сайт, используя аккаунты популярных социальных сетей и мессенджеров Google, Facebook, Telegram
Плагин HybridAuth для Cotonti CMF: социальная аутентификация version 3.1-3.13.0
HybridAuth — это плагин для Cotonti Siena/Verona, который позволяет пользователям регистрироваться и входить на сайт, используя аккаунты популярных социальных сетей и мессенджеров (Google, Facebook, Telegram, Twitter и любых других провайдеров, поддерживающих OAuth 2.0 / OpenID Connect). Вся авторизация происходит напрямую между сайтом и выбранным сервисом, без участия посредников — ваши данные остаются под вашим контролем.
Плагин базируется на релизе v3.13.0 проверенной библиотеке Hybridauth 3.x и адаптирован для Cotonti, повторяя логику оригинального плагина, но с исправлением ошибок и добавлением современных провайдеров (Telegram через OIDC). Исходный код доступен в репозитории: https://github.com/webitproff/hybridauth-cotonti.
Оглавление
- Возможности плагина
- Как это работает
- Установка
- Настройка провайдеров
- Конфигурация плагина
- Интеграция с темой оформления
- Авторегистрация и привязка аккаунтов
- Логирование и отладка
- Структура файлов и хуки
- Заключение и ссылки
Возможности плагина
- Вход / Регистрация через соцсети — одним кликом пользователь попадает на сайт, система автоматически создаёт учётную запись, заполняя профиль данными из социального аккаунта (имя, email, аватар, дата рождения и т.д.).
- Привязка нескольких провайдеров — в личном кабинете можно подключить несколько соцсетей к одной учётной записи, чтобы входить любым из привязанных способов.
- Гибкая конфигурация — каждый провайдер включается/отключается отдельно, задаются ключи и область видимости (scope) индивидуально.
- Авторегистрация (опционально) — при первом входе автоматически создаётся новый пользователь; можно также заблокировать ручную регистрацию и оставить только социальный вход.
- Совместимость с темами — через шаблонные теги выводятся кнопки входа и панель управления привязанными аккаунтами; легко стилизуется под Bootstrap 5.
- Генерация читаемого логина — на основе имени из соцсети создаётся чистый URL‑безопасный никнейм (пробелы и спецсимволы удаляются).
- Поддержка аватаров — аватар из соцсети сохраняется как внешний URL (не загружается на сервер), что экономит дисковое пространство.
- Инструмент синхронизации — в админке можно проверить и автоматически добавить недостающие поля в таблицу пользователей для выбранных провайдеров.
- Логирование — запись основных событий в файл помогает при отладке.
Как это работает
Плагин подключает библиотеку Hybridauth 3.x, которая реализует стандартные протоколы OAuth 2.0 / OpenID Connect для более чем 40 провайдеров. При клике на кнопку «Войти через …» пользователь перенаправляется на сайт провайдера, где подтверждает доступ. После успешной аутентификации провайдер возвращает на сайт специальный код, по которому библиотека получает токен доступа и загружает профиль пользователя.
Далее плагин ищет в базе данных запись с таким же идентификатором провайдера. Если находит — выполняет вход. Если нет и включена авторегистрация — создаёт нового пользователя, заполняя стандартные поля (user_name, user_email, user_avatar и др.). После этого пользователь автоматически авторизуется в Cotonti.
Установка
- Скачайте ZIP-архив плагина из репозитория hybridauth-cotonti или клонируйте его.
- Скопируйте папку
hybridauthиз архива в директориюplugins/вашего сайта.
Внутри папкиlib/Hybridauth/уже находится готовая библиотека Hybridauth 3.x — ничего дополнительно качать не нужно. - Зайдите в панель администратора Cotonti («Конфигурация → Плагины») и нажмите «Установить» напротив HybridAuth.
- После установки откройте настройки плагина и сохраните их (даже без изменений) — это создаст в таблице
usersнеобходимые колонки для хранения ID и URL‑профилей соцсетей (например,user_google_id,user_telegram_url). - Настройте провайдеров (см. раздел «Настройка провайдеров»).
Работа плагина требует установленного и настроенного URL Editor, а именно доступности сайта провайдерам по ссылке https://yourproject.com/hybridauth смотреть plugins/hybridauth/conf/hybridauth.config.php
'callback' => $cfg['mainurl'] . '/' . 'hybridauth',
Настройка провайдеров
Список поддерживаемых и руководство по настройке провайдеров для плагина HybridAuth в Cotonti.
Перечислены только те провайдеры, которые указаны в официальной таблице поддерживаемых провайдеров Hybridauth 3.
Поддерживаемые провайдеры и их возможности
Таблица основана исключительно на официальном списке поддерживаемых провайдеров Hybridauth 3. Для каждого провайдера указаны поддерживаемые им возможности: аутентификация, получение профиля пользователя, контактов, статусов и ленты активности.
Именно эти возможности реализованы в соответствующих адаптерах библиотеки.
| Провайдер | Протокол | Аутентификация | Профиль пользователя | Контакты | Статусы | Лента активности |
|---|---|---|---|---|---|---|
| OAuth2 | ✅ | ✅ | ✅ | |||
| OAuth2 | ✅ | ✅ | ✅ | ✅ | ||
| Telegram | Hybrid | ✅ | ✅ | |||
| OAuth1 | ✅ | ✅ | ✅ | ✅ | ✅ | |
| GitHub | OAuth2 | ✅ | ✅ | |||
| Discord | OAuth2 | ✅ | ✅ | |||
| OAuth2 | ✅ | ✅ | ✅ | |||
| Microsoft | OAuth2 | ✅ | ✅ | ✅ | ||
| Apple | OAuth2 | ✅ | ✅ | |||
| Steam | Hybrid | ✅ | ✅ | |||
| Slack | OAuth2 | ✅ | ✅ | |||
| Spotify | OAuth2 | ✅ | ✅ |
Примечание: В таблице перечислены далеко не все, но только те провайдеры, чьи адаптеры входят в официальную поставку Hybridauth 3. Полный список см. на hybridauth.github.io/providers.html.
Для работы любого OAuth-провайдера требуется предварительная регистрация приложения и получение client id/secret.
Конфигурация провайдеров: файл hybridauth.config.php
Настройка провайдеров выполняется не через админ-панель Cotonti, а непосредственно в файле plugins/hybridauth/conf/hybridauth.config.php.
Этот файл является основным конфигурационным файлом плагина и содержит:
- Глобальный callback-адрес — единый URL для всех провайдеров.
- Список провайдеров с параметрами:
enabled— включён (true) или выключен (false);keys— идентификатор приложения (id) и секретный ключ (secret);scope— права доступа (какие данные запрашивать у пользователя).
Пример структуры файла (только Google и Telegram, которые уже настроены в вашем плагине)
<?php
defined('COT_CODE') or die('Wrong URL');
global $cfg;
return [
'callback' => $cfg['mainurl'] . '/hybridauth',
'providers' => [
'Google' => [
'enabled' => true,
'keys' => [
'id' => 'ВАШ_CLIENT_ID.apps.googleusercontent.com',
'secret' => 'ВАШ_CLIENT_SECRET'
],
'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email',
],
'Telegram' => [
'enabled' => true,
'keys' => [
'id' => '8911989645', // числовой Client ID
'secret' => 'ВАШ_CLIENT_SECRET'
],
'scope' => 'openid profile',
],
],
];
Для добавления любого другого провайдера достаточно добавить новый блок в секцию providers, указав его ключи и scope, полученные при регистрации приложения.
Как конфигурационный файл подключается и участвует в логике плагина
1. Загрузка конфигурации
Файл hybridauth.config.php подключается в inc/hybridauth.functions.php на самой ранней стадии — до определения всех функций:
global $hybridauth_config;
$hybridauth_config = include __DIR__ . '/../conf/hybridauth.config.php';
После этого содержимое конфигурации доступно через глобальную переменную $hybridauth_config во всех файлах плагина.
2. Использование в контроллере hybridauth.php
Главный скрипт плагина (hybridauth.php) целиком опирается на этот конфигурационный массив:
Инициализация библиотеки:
$hybridauth = new Hybridauth\Hybridauth($hybridauth_config);Проверка доступности провайдера:
if (empty($hybridauth_config['providers'][$provider]['enabled'])) { cot_die_message(403); }- Обработка callback и повторная аутентификация:
При возврате пользователя от провайдера скрипт снова обращается к$hybridauth_config, чтобы получить правильное название и параметры провайдера.
3. Хуки, использующие конфигурацию
hybridauth.login.php— проверяет, что запрос пришёл от соцсети, и формирует условие для поиска пользователя по ID провайдера.hybridauth.usertags.php— для каждого включённого провайдера добавляет теги{GOOGLE_ID},{GOOGLE_URL}и т.п. в шаблоны.hybridauth_login()иhybridauth_accounts()— перебираютprovidersи генерируют кнопки входа или панель управления привязками.
Таким образом, единожды заполненный файл hybridauth.config.php становится центральным источником данных для всего плагина. Любые изменения — добавление нового провайдера, смена ключей, включение/отключение — сразу подхватываются всей системой без необходимости редактировать другие файлы.
Важно помнить и отличать настройки плагина от настройки провайдеров!
- Конфигурация провайдеров выполняется только в файле
plugins/hybridauth/conf/hybridauth.config.php. - Файл загружается в
inc/hybridauth.functions.phpи становится глобальной переменной$hybridauth_config. - Контроллер
hybridauth.phpи все хуки используют этот массив для инициализации библиотеки, проверки провайдеров и генерации виджетов. - Для каждого провайдера достаточно получить
idиsecretв его панели разработчика и прописать их в конфиге — после этого он сразу становится доступен для пользователей (при enabled = true).
Такой подход обеспечивает максимальную гибкость и прозрачность: вы всегда знаете, где искать настройки, и можете быстро адаптировать плагин под любые социальные сети и управлять каждой, поддерживаемые библиотекой Hybridauth.
Все провайдеры настраиваются в файле plugins/hybridauth/conf/hybridauth.config.php. Для каждого указывается enabled (вкл/выкл), keys (id и secret) и опционально scope.
- Перейдите в Google Cloud Console.
- Создайте проект (или выберите существующий).
- В разделе APIs & Services → Credentials нажмите + Create Credentials → OAuth client ID.
- Выберите тип приложения Web application.
В поле Authorized redirect URIs укажите:
https://ваш-сайт.com/hybridauth(адрес должен точно совпадать с параметром
callbackв конфиге плагина, без языкового префикса).- После создания скопируйте Client ID и Client Secret.
Пример конфигурации:
'Google' => [
'enabled' => true,
'keys' => [
'id' => 'ВАШ_CLIENT_ID.apps.googleusercontent.com',
'secret' => 'ВАШ_CLIENT_SECRET'
],
'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email',
],
Telegram
Современный провайдер Telegram использует протокол OpenID Connect (OIDC). Для его настройки:
- Создайте бота через @BotFather (команда
/newbot). - В чате с BotFather нажмите кнопку «Open» (запуск мини‑приложения), перейдите в Bot Settings → Web Login.
Нажмите Configure и укажите тот же самый callback URL:
https://ваш-сайт.com/hybridauth- Получите Client ID (числовой) и Client Secret (длинная строка).
Конфигурация:
'Telegram' => [
'enabled' => true,
'keys' => [
'id' => '123456789', // числовой Client ID
'secret' => 'AbCdEfGhIjKlMnOpQrStUvWxYz123456789' // Client Secret
],
'scope' => 'openid profile', // можно добавить 'phone' для получения номера телефона
],
Другие провайдеры
Библиотека Hybridauth поддерживает множество провайдеров: Facebook, Twitter (X), GitHub, VK, Одноклассники, Яндекс и др. Для их добавления достаточно:
- создать приложение в соответствующей платформе,
- получить id/secret,
- прописать секцию в
providers, указав необходимыйscope.
Для многих провайдеров уже есть готовые адаптеры в папке lib/Hybridauth/Provider/. Если нужный провайдер отсутствует, можно добавить его по документации Hybridauth.
Конфигурация плагина
Файл plugins/hybridauth/conf/hybridauth.config.php содержит общие настройки:
return [
'callback' => $cfg['mainurl'] . '/hybridauth', // единый callback для всех провайдеров
'providers' => [ /* … */ ],
'debug_mode' => true, // включить подробное логирование
'debug_file' => $cfg['plugins_dir'] . '/hybridauth/log/hybridauth_debug.log',
];
Параметр callback должен указывать на файл hybridauth.php в корне плагина. Он же используется всеми провайдерами. Важно, чтобы этот URL был абсолютным и совпадал с тем, что прописано в настройках приложений у провайдеров.
В административной панели доступны опции:
- Авто-регистрация — если включена, при первом входе через соцсеть автоматически создаётся новый пользователь.
- Блокировать ручную регистрацию — скрывает стандартную форму регистрации, оставляя только социальный вход (полезно для закрытых сообществ).
Поведение плагина в зависимости от настроек autoreg и block_manual_registration
Все настройки хранятся в $cfg['plugin']['hybridauth'] и задаются через админ-панель (файл hybridauth.setup.php).
Основная логика обрабатывается в файлах hybridauth.php, hybridauth.register.add.php, hybridauth.register.form.php.
1. Настройка autoreg = 0 (авторегистрация выключена)
Где применяется: hybridauth.php, строка } elseif ($cfg['plugin']['hybridauth']['autoreg']) — код не выполняется при autoreg = 0.
Что делает плагин:
- Пользователь кликает «Войти через Google/Telegram».
- После успешной аутентификации и получения профиля плагин проверяет, существует ли запись с таким же
user_{provider}_id. - Если пользователь найден – выполняется вход (как обычно).
- Если пользователь НЕ найден – плагин НЕ создаёт нового пользователя. Вместо этого:
- Устанавливается сообщение
hybridauth_no_linked_account(«Не обнаружено учётных записей…»). - Браузер перенаправляется на страницу ручной регистрации (
/users?m=register).
- Устанавливается сообщение
- На странице регистрации, если в сессии есть
cot_hybridauth, хукhybridauth.register.form.phpпредзаполняет поля данными из соцсети (имя, email, аватар и т.д.). - Пользователь может вручную завершить регистрацию, после чего аккаунт будет создан, а провайдер автоматически привязан к новой учётной записи.
- При этом блокировка ручной регистрации (
block_manual_registration) может дополнительно влиять (см. пункты 3 и 4).
Итог: без авторегистрации плагин только связывает уже существующие аккаунты с соцсетями, но не создаёт новые автоматически. Пользователю предлагается обычная форма регистрации с уже заполненными полями.
2. Настройка autoreg = 1 (авторегистрация включена)
Где применяется: hybridauth.php, в блоке } elseif ($cfg['plugin']['hybridauth']['autoreg']).
Что делает плагин:
- После аутентификации и получения профиля, если пользователь не найден по
user_{provider}_id, плагин автоматически создаёт новую учётную запись.- Вызывается функция
hybridauth_complete_profile(), которая заполняет поляuser_name,user_email,user_avatar,user_firstnameи т.д. на основе данных соцсети. - Генерируется случайный пароль (пользователь всё равно будет входить через соцсеть).
- Выполняется
cot_add_user(), активация принудительно отключается ($cfg['users']['regnoactivation'] = true). - Сразу после создания происходит автоматический вход (редирект на
login?a=check&...&provider=...).
- Вызывается функция
- Если пользователь уже существует (найден по ID провайдера), то выполняется обычный вход без создания дубликата.
- Проверка на существующий email: перед созданием нового пользователя плагин проверяет, нет ли в базе записи с таким же email. Если email уже используется, но провайдер к ней не привязан, плагин выводит предупреждение и перенаправляет на страницу входа, чтобы пользователь мог сначала войти и привязать соцсеть в профиле.
Итог: при включённой авторегистрации вход через соцсеть максимально упрощён – новый пользователь создаётся мгновенно, без участия человека.
3. Настройка block_manual_registration = 0 (ручная регистрация разрешена)
Где применяется: hybridauth.register.add.php, строка if ($cfg['plugin']['hybridauth']['block_manual_registration']) — код не выполняется.
Что делает плагин:
- Никак не ограничивает стандартную регистрацию Cotonti.
- Пользователь может зарегистрироваться через обычную форму (
/users?m=register), даже если у него нет соцсетей. - Если при этом в сессии есть
cot_hybridauth(пользователь пришёл после неудачной авторегистрации), плагин всё равно дополнит данные регистрации из соцсети (через хукhybridauth.register.add.php).
Итог: обычная регистрация работает без изменений, плагин лишь помогает заполнить поля, когда это уместно.
4. Настройка block_manual_registration = 1 (ручная регистрация заблокирована)
Где применяется: hybridauth.register.add.php.
Что делает плагин:
- При отправке формы ручной регистрации (POST на
users?m=register) хукhybridauth.register.add.phpпроверяет флагblock_manual_registration. - Если флаг установлен в
true, выполняетсяcot_error('hybridauth_autoreg_inaction');— это вызывает ошибку валидации, и форма регистрации не будет принята. - В результате пользователь видит сообщение об ошибке «Ручная регистрация отключена. Войдите с помощью вашего аккаунта социальной сети.» и не может создать учётную запись обычным способом.
- Исключение: если вместе с запросом пришла активная сессия
cot_hybridauth(т.е. пользователь был перенаправлен на регистрацию после соцсети) и при этомcot_error_found()возвращаетfalse, то блокировка не применяется — регистрация с данными из соцсети всё равно будет выполнена (заполнение$ruserи отключение активации). Это позволяет завершить ручную регистрацию, когда авторегистрация выключена, но пользователь уже аутентифицирован через провайдера. - Страница с формой регистрации сама по себе остаётся доступной, но при попытке отправить данные без соцсети будет выдана ошибка.
Итог: включение этой опции превращает сайт в «закрытое» сообщество, где создание аккаунта возможно только через социальные сети (если autoreg=1) или через ручную регистрацию с данными из соцсети (если autoreg=0). Обычная регистрация по логину/паролю полностью отключается.
Примечание о термине «ручная регистрация». В контексте этого плагина под ручной регистрацией понимается штатная форма регистрации Cotonti, доступная по адресу /users?m=register, где пользователь вводит логин, пароль, email и другие поля и создаёт учётную запись стандартными средствами движка. Плагин не заменяет этот механизм, а лишь может заблокировать его или предзаполнить поля данными из социальной сети. Это важно понимать, так как термин «ручная» может сбивать с толку — он означает просто «не автоматическая через соцсеть», а не какой-то особый процесс. Именно эту форму вы видите, когда переходите на /users?m=register и заполняете поля вручную. Все остальные упоминания «ручной регистрации» в этой статье относятся именно к ней.
Сводная таблица поведения
autoreg | block_manual_registration | Результат |
|---|---|---|
| 0 | 0 | Соцсети только для входа существующих пользователей. Новые пользователи могут зарегистрироваться вручную (форма доступна). При переходе с соцсети поля формы предзаполняются. |
| 0 | 1 | Соцсети только для входа. Ручная регистрация заблокирована (ошибка при отправке формы). Пользователь, пришедший с соцсети, сможет завершить регистрацию через форму с предзаполненными данными. |
| 1 | 0 | Соцсети создают нового пользователя автоматически. Ручная регистрация доступна. |
| 1 | 1 | Полностью автоматический вход/регистрация через соцсети. Обычная регистрация отключена. |
Все эти сценарии реализованы в файлах hybridauth.php и hybridauth.register.add.php без дополнительных условий.
Интеграция с темой оформления
Плагин предоставляет два основных виджета, которые можно разместить в любых TPL-шаблонах темы.
Кнопки входа через соцсети:
<!-- IF {PHP|cot_plugin_active('hybridauth')} -->
{PHP|hybridauth_login}
<hr class="my-2">
<!-- ENDIF -->
Этот код обычно вставляется в форму входа (файл login.tpl) или в модальное окно авторизации. Кнопки стилизуются в файле hybridauth.login.tpl и по умолчанию выводят иконку Font Awesome и название провайдера.
Пример моего шаблона авторизации на сайте
<!--
/********************************************************************************
* File: login.tpl
* Extension: Core System Cotonti
* Description: HTML template for login.tpl.
* Compatibility: CMF/CMS Cotonti Siena v0.9.26[](https://github.com/Cotonti/Cotonti)
* Dependencies:
* Bootstrap 5.3.+[](https://getbootstrap.com/);
* Font Awesome Free 7.1[](https://fontawesome.com/)
* Theme: Index36
* Version: 1.0.2
* Created: 01 Feb 2026
* Updated: 25 July 2026
* Copyright (c) 2026 webitproff | https://github.com/webitproff
* Source: https://github.com/webitproff/index36-cotonti-theme
* Demo : https://freelance-script.abuyfile.com/
* Help and support: https://abuyfile.com/ru/forums/cotonti/original/skins/index36
* License: BSD (Free distribution with saving Copyright (c) 2026 webitproff)
********************************************************************************/
-->
<!-- BEGIN: MAIN -->
{FILE "{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/warnings.tpl"} <!-- обязательно для 'hybridauth' -->
<!-- BEGIN: USERS_AUTH_MAINTENANCE -->
<div class="alert alert-danger mb-0">
<h4>{PHP.L.users_maintenance1}</h4>
<p>{PHP.L.users_maintenance2}</p>
</div>
<!-- END: USERS_AUTH_MAINTENANCE -->
<div class="d-flex">
<div class="d-none d-lg-flex flex-grow-1 align-items-center justify-content-center">
<div class="p-4" style="max-width:520px">
<img src="{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/img/auth.svg" class="img-fluid" alt="{USERS_AUTH_TITLE}">
</div>
</div>
<div class="d-flex flex-column align-items-center justify-content-center vh-100 col-12 col-lg-6 col-xl-4" style="background-color: var(--bs-sidebar-bg);" data-bs-theme="inherit">
<div class="w-100 p-4">
<div class="text-center mb-4">
<img src="{PHP.R.app-logo}" width="75" alt="logo">
</div>
<!-- IF {PHP.usr.id} -->
<div class="alert alert-warning">
<p>{PHP.L.users_loggedinas} <strong>{PHP.usr.name}</strong>.<br/>{PHP.L.users_logoutfirst}</p>
<p><a class="button" href="{PHP.sys.xk|cot_url('login','out=1&x=$this', '', 0, 1)}">{PHP.L.Logout}</a></p>
</div>
<!-- ENDIF -->
<!-- IF {PHP.usr.id} < 1 OR {PHP.usr.id} == 0 -->
<!-- IF {PHP|cot_plugin_active('hybridauth')} -->
{PHP|hybridauth_login}
<div class="my-2"><div>
<!-- ENDIF -->
<div class="d-flex align-items-center my-4">
<hr class="flex-grow-1">
<span class="px-2 small text-uppercase">{USERS_AUTH_TITLE}</span>
<hr class="flex-grow-1">
</div>
<form id="login" name="login" action="{USERS_AUTH_SEND}" method="post">
<div class="mb-3 position-relative">
<i class="fa-solid fa-circle-user position-absolute top-50 start-0 translate-middle-y ms-3 text-purple"></i>
{USERS_AUTH_USER}
</div>
<div class="mb-3 position-relative">
<i class="fa-solid fa-lock position-absolute top-50 start-0 translate-middle-y ms-3"></i>
{USERS_AUTH_PASSWORD}
</div>
<div class="form-check mb-4 d-flex align-items-center">
{USERS_AUTH_REMEMBER}
</div>
<button class="btn btn-primary w-100 mb-3" type="submit" name="rlogin" value="0">{PHP.L.Login}</button>
</form>
<hr>
<ul class="nav flex-column">
<li class="nav-item mb-3">
<a class="small text-reset" href="{PHP|cot_url('users','m=passrecover')}">
<i class="fa-solid fa-key me-2"></i>{PHP.L.users_lostpass}
</a>
</li>
<li class="nav-item">
<a class="small" href="{PHP|cot_url('users','m=register')}">
<i class="fa-solid fa-user-plus me-2"></i>{PHP.L.Register}
</a>
</li>
</ul>
<!-- ENDIF -->
</div>
</div>
</div>
<!-- END: MAIN -->
Пример модального окна авторизации на сайте
кнопка
<a class="nav-link" href="{PHP|cot_url('login')}" data-bs-toggle="modal" data-bs-target="#authModal">
<i class="fa-solid fa-right-to-bracket me-1"></i>{PHP.L.Login}
</a>
и тело
<div class="modal fade" id="authModal" tabindex="-1" aria-labelledby="authModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header" style="background-color: var(--bs-header-bg);">
<h5 class="modal-title" id="authModalLabel">{PHP.L.Login}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- IF {PHP|cot_plugin_active('hybridauth')} -->
{PHP|hybridauth_login}
<hr class="my-2">
<!-- ENDIF -->
<form action="{PHP|cot_url('login','a=check')}" method="post">
<div class="mb-3">
<label for="inputEmail" class="form-label">{PHP.L.users_nameormail}</label>
<input type="text" class="form-control" name="rusername" id="inputEmail" />
</div>
<div class="mb-3">
<label for="inputPassword" class="form-label">{PHP.L.Password}</label>
<input type="password" class="form-control" name="rpassword" id="inputPassword" />
<a href="{PHP|cot_url('users', 'm=passrecover')}" class="small text-decoration-none">{PHP.L.users_lostpass}</a>
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="rememberMe" name="rremember">
<label class="form-check-label" for="rememberMe">{PHP.L.users_rememberme}</label>
</div>
<button type="submit" class="btn btn-primary">{PHP.L.Login}</button>
</form>
</div>
</div>
</div>
</div>
Шаблон регистрации на сайте
Такой вариант шаблона users.register.tpl учитывает autoreg именно там, где это нужно. Кнопки соцсетей на странице регистрации должны появляться только когда авторегистрация включена (autoreg === '1'), иначе в них нет смысла.
В итоге логика выглядит так:
- Если ручная регистрация заблокирована И авторегистрация включена
→ только сообщение и кнопки соцсетей (форма скрыта). - Если ручная регистрация разрешена И авторегистрация включена
→ кнопки соцсетей + форма регистрации (пользователь может выбрать). - Если авторегистрация выключена
→ кнопки соцсетей не показываются (потому что плагин всё равно отправит на ручную форму), видна только стандартная форма или сообщение о блокировке.
Можно пересобрать условия и вывести предупреждение, что регистрация полностью недоступна, но это редкий кейс. Шаблон с рабочего сайта, проверен и полностью согласован с бизнес-логикой плагина. Это именно мой рабочий шаблон, вам как пример
<!--
/********************************************************************************
* File: users.register.tpl
* Extension: Module 'users'
* Description: HTML template for Users Module - users.register.tpl.
* Compatibility: Cotonti v.1.x+ (https://github.com/Cotonti/Cotonti)
* Dependencies:
* Bootstrap 5.3.+[](https://getbootstrap.com/);
* Font Awesome Free 7.1[](https://fontawesome.com/)
* Theme: Index36
* Version: 1.0.2
* Created: 01 Feb 2026
* Updated: 25 July 2026
* Copyright (c) 2026 webitproff | https://github.com/webitproff
* Source: https://github.com/webitproff/index36-cotonti-theme
* Demo : https://freelance-script.abuyfile.com/
* Help and support: https://abuyfile.com/ru/forums/cotonti/original/skins/index36
* License: BSD (Free distribution with saving Copyright (c) 2026 webitproff)
********************************************************************************/
-->
<!-- BEGIN: MAIN -->
<div class="d-flex h-100">
{FILE "{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/warnings.tpl"}
<div class="d-none d-lg-flex flex-grow-1 align-items-center justify-content-center">
<div class="p-4" style="max-width:520px">
<img src="{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/img/queue-dark.svg" class="img-fluid" alt="">
</div>
</div>
<div class="card border-0 rounded-0 d-flex flex-column align-items-center justify-content-center col-12 col-lg-6 col-xl-5 pt-5 pb-5">
<div class="w-100 p-4">
<div class="text-center mb-4">
<img src="{PHP.R.app-logo}" width="75" alt="logo">
</div>
<!-- IF {PHP.usr.id} -->
<div class="vh-100">
<div class="alert alert-warning">
<p>{PHP.L.users_loggedinas} <strong>{PHP.usr.name}</strong>.<br/>{PHP.L.users_logoutfirst}</p>
<p><a class="button" href="{PHP.sys.xk|cot_url('login','out=1&x=$this', '', 0, 1)}">{PHP.L.Logout}</a></p>
</div>
</div>
<!-- ENDIF -->
<!-- IF {PHP.usr.id} < 1 OR {PHP.usr.id} == 0 -->
<!-- IF {PHP|cot_plugin_active('hybridauth')} AND {PHP.cfg.plugin.hybridauth.block_manual_registration} === '1' -->
<!-- Ручная регистрация заблокирована: вход через hybridauth -->
<!-- IF {PHP.cfg.plugin.hybridauth.autoreg} === '1' -->
<div class="alert alert-info">
<p>{PHP.L.hybridauth_autoreg_inaction}</p>
</div>
{PHP|hybridauth_login}
<hr class="my-4">
<!-- ENDIF -->
<!-- ELSE -->
<!-- Ручная регистрация разрешена: показываем и кнопки соцсетей (если плагин активен), и форму -->
<!-- IF {PHP|cot_plugin_active('hybridauth')} AND {PHP.cfg.plugin.hybridauth.autoreg} === '1' -->
{PHP|hybridauth_login}
<hr class="my-4">
<!-- ENDIF -->
<div class="d-flex align-items-center my-4">
<hr class="flex-grow-1">
<span class="px-2 small text-uppercase">{USERS_REGISTER_TITLE}</span>
<hr class="flex-grow-1">
</div>
<form id="user-register" name="register" action="{USERS_REGISTER_SEND}" method="post" enctype="multipart/form-data">
<!-- IF {USERS_REGISTER_GROUPSELECTBOX} -->
<div class="mb-4">
<label class="form-label small">{PHP.L.profile_group} <span class="text-danger">*</span></label>
{USERS_REGISTER_GROUPSELECTBOX}
</div>
<!-- ENDIF -->
<div class="mb-4 position-relative">
<i class="fa-solid fa-circle-user position-absolute top-50 start-0 translate-middle-y ms-3"></i>
{USERS_REGISTER_USER}
</div>
<div class="mb-4 position-relative">
<i class="fa-solid fa-envelope position-absolute top-50 start-0 translate-middle-y ms-3"></i>
{USERS_REGISTER_EMAIL}
</div>
<div class="mb-4 position-relative">
<i class="fa-solid fa-lock position-absolute top-50 start-0 translate-middle-y ms-3"></i>
{USERS_REGISTER_PASSWORD}
</div>
<div class="mb-4 position-relative">
<i class="fa-solid fa-lock position-absolute top-50 start-0 translate-middle-y ms-3"></i>
{USERS_REGISTER_PASSWORDREPEAT}
</div>
<!-- IF {PHP.cfg.captchamain|cot_plugin_active($this)} -->
<div class="mb-4">
<label for="rverify" class="form-label small">{PHP.langSkStr.captchaVerify}</label>
<div class="d-flex align-items-center">
<div class="flex-grow-1">{USERS_REGISTER_VERIFY_IMG}</div>
<span class="">{USERS_REGISTER_VERIFY_INPUT}</span>
</div>
</div>
<!-- ENDIF -->
<!-- IF {PHP|cot_plugin_active('useragreement')} -->
<div class="form-check mb-4 d-flex align-items-center">
<input class="form-check-input" type="checkbox" name="ruseragreement" value="1" id="ruseragreement">
<div class="flex-grow-1">
<label class="form-check-label ms-3 small" for="ruseragreement">
<a href="{PHP|cot_url('plug', 'e=useragreement')}" target="blank">
{PHP.L.useragreement_agree}
</a>
</label>
</div>
</div>
<!-- ENDIF -->
<button class="btn btn-success w-100 mb-5" type="submit">{PHP.L.Register}</button>
</form>
<!-- ENDIF -->
<hr>
<ul class="nav flex-column">
<li class="nav-item mb-2">
<a class="small text-reset" href="{PHP|cot_url('users','m=passrecover')}">
<i class="fa-solid fa-key me-2"></i>{PHP.L.users_lostpass}
</a>
</li>
<li class="nav-item">
<a class="small text-reset" href="{PHP|cot_url('login')}">
<i class="fa-solid fa-user-plus me-2"></i>{PHP.L.Login}
</a>
</li>
</ul>
<!-- ENDIF -->
</div>
</div>
</div>
<!-- END: MAIN -->
Панель управления привязками в профиле пользователя:
{PHP|hybridauth_accounts}
Разместите в шаблоне профиля (users.profile.tpl), например после блока с паролем. Пользователь увидит список включённых провайдеров, сможет привязать новый аккаунт или отвязать существующий. Шаблон этого блока — hybridauth.accounts.tpl.
Авторегистрация и привязка аккаунтов
Когда посетитель впервые входит через соцсеть и включена авторегистрация, плагин вызывает функцию hybridauth_complete_profile(), которая заполняет профиль нового пользователя:
user_name— очищенный от спецсимволовdisplayName(или часть email, если имя не передано).user_email— email из соцсети, либо сгенерированный на основе ID провайдера (для Telegram).user_avatar— полный URL аватара (не скачивается на сервер, чтобы не плодить файлы).user_firstname,user_lastname— если существуют соответствующие дополнительные поля.user_country,user_lang,user_gender— при наличии в профиле.user_photo— URL фотографии (опционально).
Привязка дополнительных провайдеров к уже существующей учётной записи выполняется через ссылки «Связать» / «Отвязать» в профиле. Один и тот же аккаунт соцсети может быть привязан только к одному пользователю сайта.
Логирование и отладка
Плагин умеет писать два лога:
hybridauth.log— создаётся автоматически в папкеplugins/hybridauth/log/. Сюда попадают основные события: успешные входы, ошибки аутентификации, создание пользователей. За это отвечает функцияhybridauth_log().hybridauth_debug.log— включается параметром'debug_mode' => trueв конфигурации. Библиотека Hybridauth записывает сюда детальную техническую информацию (заголовки запросов, параметры, ошибки HTTP).
Для быстрой диагностики ошибок при настройке нового провайдера рекомендуется включить режим отладки и заглянуть в hybridauth_debug.log.
Схема структуры плагина hybridauth для Cotonti
/plugins/hybridauth/ # Корень плагина
│
├── conf/ # Конфигурация
│ └── hybridauth.config.php # Настройки провайдеров, callback URL, отладка
│
├── inc/ # Основные функции
│ └── hybridauth.functions.php # Автозагрузчик Hybridauth 3.x, общие функции:
│ # - hybridauth_complete_profile()
│ # - hybridauth_login()
│ # - hybridauth_accounts()
│
├── lang/ # Языковые файлы
│ └── hybridauth.ru.lang.php # Русские переводы для интерфейса и ошибок
│
├── lib/ # Библиотека Hybridauth 3.x (без Composer)
│ └── Hybridauth/ # Содержимое папки src/ из официального дистрибутива
│ ├── Adapter/
│ ├── Data/
│ ├── Exception/
│ ├── HttpClient/
│ ├── Logger/
│ ├── Provider/
│ ├── Storage/
│ ├── Thirdparty/
│ ├── User/
│ ├── Hybridauth.php # Главный класс библиотеки
│ └── autoload.php # Штатный автозагрузчик (рекомендуется вместо самописного)
│
├── setup/ # Установка/удаление
│ ├── hybridauth.install.php # Создание полей в таблице users при установке
│ └── hybridauth.uninstall.php # Удаление полей при деинсталляции
│
├── tpl/ # Шаблоны для вывода
│ ├── hybridauth.login.tpl # Виджет кнопок входа через соцсети
│ ├── hybridauth.accounts.tpl # Блок привязки/отвязки аккаунтов в профиле
│ └── hybridauth.tools.tpl # Шаблон для страницы инструментов (админка)
│
├── hybridauth.global.php # Хук global — подключает функции для всего сайта
├── hybridauth.login.php # Хук users.auth.check.query — перехватывает логин через соцсеть
├── hybridauth.login.tags.php # Хук users.auth.tags — Выводим системные сообщения (например, "Пользователь с таким email уже существует...")
├── hybridauth.logout.php # Хук users.logout — разлогинивает из провайдеров
├── hybridauth.php # Standalone-контроллер (главная точка входа)
├── hybridauth.profile.php # Хук users.profile.tags — добавляет в профиль блок управления аккаунтами
├── hybridauth.register.add.php # Хук users.register.add.validate — обрабатывает авторегистрацию
├── hybridauth.register.form.php # Хук users.register.main — предзаполняет форму регистрации данными из соцсети
├── hybridauth.register.redirect.php # Хук users.register.add.done — перенаправляет после регистрации на автовход
├── hybridauth.tools.php # Хук tools — добавляет инструмент в админку для синхронизации полей
├── hybridauth.usertags.php # Хук usertags.main — предоставляет теги для вывода данных соцсетей
└── hybridauth.setup.php # Мета-информация плагина (версия, зависимости, настройки)
Примечания:
Все файлы с хуками (.php в корне) подключены к соответствующему событию Cotonti через блок [BEGIN_COT_EXT] Hooks=....
Библиотека Hybridauth 3.x размещается в /lib/Hybridauth/ с сохранением структуры пространств имён. Рекомендуется использовать штатный autoload.php из папки lib/Hybridauth/ (см. hybridauth.functions.php).
Конфигурация провайдеров (ключи, scope) задаётся в hybridauth.config.php. Включение/отключение провайдера — через ключ enabled.
Некоторые файлы и хуки
Основные файлы плагина и их назначение:
| Файл | Назначение |
|---|---|
hybridauth.php | Главный контроллер. Обрабатывает все запросы: вход, привязка, отвязка, callback от провайдеров. |
inc/hybridauth.functions.php | Загрузка библиотеки, функции генерации профиля, логирования, формирования виджетов. |
conf/hybridauth.config.php | Конфигурация всех провайдеров и общие параметры. |
hybridauth.login.php | Хук users.auth.check.query. Подставляет условие для поиска пользователя по ID провайдера при социальном входе. |
hybridauth.global.php | Хук global. Подключает функции плагина на всех страницах. |
hybridauth.login.tpl, hybridauth.accounts.tpl | Шаблоны для кнопок входа и панели управления привязками. |
hybridauth.usertags.php | Хук usertags.main. Добавляет теги {GOOGLE_ID}, {TELEGRAM_URL} и т.п. для использования в шаблонах профиля/списка пользователей. |
hybridauth.register.*.php | Хуки для предзаполнения формы регистрации данными из соцсети и блокировки ручной регистрации. |
hybridauth.tools.php | Хук tools. Инструмент для синхронизации полей в админке. |
setup/ | Установочные скрипты для добавления/удаления колонок в таблице users. |
lib/Hybridauth/ | Файлы библиотеки Hybridauth 3.x. |
Плагин использует стандартную систему хуков Cotonti. Все файлы, начинающиеся с префикса hybridauth., являются хуками, и их имена соответствуют точкам входа, описанным в официальной документации Cotonti.
Механика работы плагина: пошаговые сценарии на примере Google
Чтобы понять, как плагин обрабатывает социальную аутентификацию, рассмотрим три типичных ситуации на примере провайдера Google. Все действия происходят в контроллере hybridauth.php с участием хука hybridauth.login.php и библиотеки Hybridauth.
Сценарий 1. Первый вход на сайт через Google
Пользователь ещё не имеет учётной записи на сайте и хочет войти, используя свой Google-аккаунт, не заполняя форму регистрации.
- Клик по кнопке «Войти через Google»
Кнопка в шаблоне формирует ссылку видаhttps://сайт/hybridauth?a=login&provider=Google. Запрос принимает контроллерhybridauth.php. - Начало OAuth-авторизации
Контроллер создаёт объект библиотекиHybridauth\Hybridauthс конфигурацией Google и вызывает методauthenticate('Google'). Библиотека формирует URL для перенаправления на сервер Google, куда и отправляет пользователя. - Подтверждение на стороне Google
Пользователь авторизуется в Google (если ещё не) и разрешает приложению доступ к запрошенным данным (профиль, email). Google возвращает браузер обратно на callback-адресhttps://сайт/hybridauth, добавляя параметрыcodeиstate. - Обработка callback-запроса
Контроллер обнаруживает отсутствие параметраprovider, но видитcodeв URL. Он извлекает из сессии сохранённое название провайдера (Google) и снова вызываетauthenticate('Google'), передавая полученный код. Библиотека обменивает код на токен доступа и запрашивает профиль пользователя через Google API. В результате скрипт получает объект с данными: идентификатор Google (sub), имя, email, URL аватара и т.д. - Поиск существующей учётной записи
Плагин проверяет, существует ли в таблицеusersзапись с таким жеuser_google_id. Для нового пользователя такой записи нет. - Проверка конфликта по email
Если провайдер передал email (Google передаёт всегда), плагин ищет пользователя с таким же email.- Если пользователь найден, но его
user_google_idещё не заполнен – плагин выводит сообщение с предложением войти под своей учётной записью и привязать Google в профиле, после чего перенаправляет на страницу входа. - Если дубликата email нет – переход к авторегистрации (если она включена).
- Если пользователь найден, но его
- Автоматическая регистрация
При включённой опцииautoregплагин вызывает функциюhybridauth_complete_profile(), которая заполняет массив$ruser:user_name– очищенный от спецсимволовdisplayName;user_email– email, полученный от Google;user_avatar– прямая ссылка на аватар (не скачивается на сервер);user_password– случайно сгенерированный пароль (пользователь всё равно будет входить через соцсеть);user_google_idиuser_google_url– уникальный идентификатор и ссылка на профиль Google. Затем вызывается стандартная функция Cotonticot_add_user()для создания пользователя. Активация учётной записи принудительно отключается (regnoactivation = true).
- Автоматический вход
После создания пользователя (или если пользователь уже существовал и был найден по Google ID) плагин перенаправляет браузер наlogin?a=check&x=...&provider=google, сохранив в сессии массивcot_hybridauthс идентификатором Google. - Завершение входа через хук
Хукhybridauth.login.phpперехватывает запрос кlogin?a=check, видит параметрprovider=googleи устанавливает условиеuser_google_id = :hybridauth_idдля поиска пользователя. Система Cotonti находит запись, выполняет авторизацию (функцияcot_user_authorize), и пользователь попадает на сайт под своей новой учётной записью.
Сценарий 2. Вход уже привязанного пользователя
Пользователь ранее уже привязал Google к своей учётной записи (поле user_google_id заполнено).
- При клике на кнопку входа повторяются шаги 1–4, как и в первом сценарии.
- На шаге 5 плагин находит запись с таким же
user_google_id. - Сразу же выполняется редирект на
login?a=check&...&provider=google, где хук подставляет условие поиска по Google ID. - Cotonti выполняет вход без лишних проверок, так как пользователь уже существует и привязан.
Если пользователь уже авторизован на сайте (не гость) и случайно нажимает кнопку «Войти через Google», контроллер перенаправляет его на страницу входа с сообщением «Вы уже вошли как …» – это предотвращает конфликты и дублирование сессий.
Сценарий 3. Привязка Google к существующему профилю
У пользователя уже есть обычная учётная запись (с паролем), и он хочет добавить возможность входить через Google, не создавая новую учётную запись.
- Кнопка «Связать» в личном кабинете
В шаблоне профиля размещён блок{PHP|hybridauth_accounts}, который генерирует ссылкуhttps://сайт/hybridauth?a=link&provider=Google. - Запуск привязки
Контроллер видитa=linkиusr['id'] > 0. Он сохраняет действие (action = 'link') и название провайдера в сессию, затем вызываетauthenticate('Google'), перенаправляя на Google. - Обработка callback
После подтверждения на стороне Google контроллер восстанавливает действиеlinkиз сессии и получает профиль пользователя. - Проверка на конфликт
Плагин проверяет, не привязан ли уже этот Google ID к другому пользователю. Если да – выводится ошибка «Этот аккаунт уже связан с другим пользователем». - Сохранение связи
Если конфликта нет, выполняетсяUPDATEзаписи текущего пользователя: в поляuser_google_idиuser_google_urlзаписываются соответствующие значения из профиля Google. - Возврат в профиль
Пользователь перенаправляется обратно на страницу профиля, где блок управления аккаунтами теперь показывает Google как «Подключено».
Аналогично работает действие unlink (отвязать) – оно очищает поля user_google_id и user_google_url и, при возможности, завершает сессию на стороне провайдера.
Ключевые выводы
- Единый контроллер – все операции (вход, привязка, отвязка) обрабатываются одним файлом
hybridauth.php, что упрощает поддержку и отладку. - Минимум дублирования – callback-логика едина для всех действий, различается только восстановлением сохранённого действия из сессии.
- Гибкость для пользователя – можно войти через соцсеть, привязать несколько провайдеров к одному аккаунту или отключить ненужный.
- Контроль конфликтов – проверка уникальности email и ID провайдера предотвращает создание дублирующихся учётных записей.
- Прозрачность – подробное логирование в
hybridauth.logиhybridauth_debug.logпозволяет быстро найти причину любой неполадки.
Логирование в плагине HybridAuth: два инструмента для полного контроля
Плагин предоставляет два независимых уровня логирования, каждый из которых решает свою задачу. Понимание того, что и куда пишется, поможет быстро находить и исправлять ошибки при настройке провайдеров.
1. Детальный лог библиотеки (hybridauth_debug.log)
Этот файл создаётся самой библиотекой Hybridauth, когда в конфигурации включён режим отладки:
'debug_mode' => true,
'debug_file' => $cfg['plugins_dir'] . '/hybridauth/log/hybridauth_debug.log',
Что попадает в этот лог:
- Полная конфигурация провайдера, с которой был запущен процесс (маскируя секреты).
- URL, на который перенаправляется пользователь для аутентификации.
- Callback-URL при возврате от провайдера.
- HTTP-запросы и ответы на техническом уровне: заголовки, тело ответа (включая токены и данные профиля), параметры curl, тайминги соединения.
Пример записи (начало входа через Google):
debug -- 2026-07-25T01:04:56+00:00 -- Initialize Hybridauth\Provider\Google, config: Array (...)
info -- 2026-07-25T01:04:56+00:00 -- Hybridauth\Provider\Google::authenticate()
debug -- 2026-07-25T01:04:56+00:00 -- Hybridauth\Provider\Google::authenticateBegin(), redirecting user to:
Array ([0] => https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=...)
Когда нужен этот лог:
- Если вход не работает, и нужно проверить, правильные ли ключи передаются в API.
- Если провайдер возвращает ошибку, и нужно увидеть точный ответ сервера (например,
invalid_client). - Чтобы убедиться, что callback URL совпадает с зарегистрированным.
Важно: этот лог содержит секретные данные (токены доступа, client_secret). Никогда не публикуйте его в открытом доступе и отключайте (debug_mode => false) после завершения отладки.
2. Основной лог плагина (hybridauth.log) и функция hybridauth_log()
Этот лог ведётся самим плагином Cotonti и показывает не технические детали HTTP, а события с точки зрения бизнес-логики: попытки входа, ошибки аутентификации, создание пользователей, привязку аккаунтов.
За запись в этот файл отвечает функция hybridauth_log(), которая определена в inc/hybridauth.functions.php:
function hybridauth_log(string $message): void
{
global $cfg;
$logFile = $cfg['plugins_dir'] . '/hybridauth/log/hybridauth.log';
$logDir = dirname($logFile);
if (!is_dir($logDir)) {
mkdir($logDir, 0755, true);
}
$timestamp = date('Y-m-d H:i:s');
file_put_contents($logFile, "[$timestamp] $message\n", FILE_APPEND);
}
Как это работает: Функция принимает текстовое сообщение, автоматически добавляет временную метку и дописывает строку в файл hybridauth.log. Папка и файл создаются автоматически при первой записи.
Пример использования в коде плагина:
hybridauth_log("Начало входа, провайдер: $provider");
hybridauth_log("Успешный вход через Google, identifier: " . $user_profile->identifier);
hybridauth_log("Ошибка authenticate: " . $e->getMessage());
hybridauth_log("Авторегистрация включена, создаём пользователя");
Что попадает в hybridauth.log:
- Каждый запуск контроллера (
hybridauth.php). - Успешные аутентификации с указанием провайдера и идентификатора пользователя.
- Обнаружение callback-запроса от провайдера.
- Результат поиска пользователя в базе (найден / не найден).
- Создание нового пользователя при авторегистрации.
- Ошибки, возникающие на любом этапе (с кодом и текстом исключения).
Когда нужен этот лог:
- Чтобы отследить полный путь пользователя от клика по кнопке до входа на сайт.
- Если после входа происходит редирект на страницу регистрации, а не вход — лог покажет, на каком этапе произошёл сбой (например, не найден пользователь, или авторегистрация не включена).
- При жалобах пользователей на невозможность привязать соцсеть — лог зафиксирует ошибку «уже привязан» или «ошибка запроса».
Преимущество перед debug-логом:hybridauth.log всегда активен и не требует включения debug_mode. Он пишет только ключевые события, поэтому файл остаётся компактным и не забивается техническими подробностями. Это основной инструмент для повседневного мониторинга работы плагина.
Резюме: какой лог использовать?
| Ситуация | Используйте |
|---|---|
| Вход через соцсеть не работает, хочу увидеть полную картину HTTP-запросов | hybridauth_debug.log (включите debug_mode) |
| Пользователь не может войти, нужно понять, на каком этапе происходит сбой | hybridauth.log (функция hybridauth_log()) |
| Нужно убедиться, что callback URL правильный | hybridauth_debug.log |
| Хочу видеть, сколько пользователей зарегистрировалось через соцсети | hybridauth.log |
Оба лога находятся в папке plugins/hybridauth/log/ и могут просматриваться одновременно. Для полной картины неисправности рекомендуется сначала проверить hybridauth.log, а если причина не ясна — включить debug_mode и изучить технический лог.
Теперь настройка логирования стала прозрачной: вы точно знаете, что, куда и зачем пишется, и можете быстро диагностировать любые проблемы с социальной аутентификацией.
Заключение и ссылки
HybridAuth — инструмент для добавления социальной аутентификации на сайт под управлением Cotonti. Он не зависит от сторонних сервисов, легко настраивается под любые провайдеры и хорошо интегрируется с современными темами (Bootstrap 5, Font Awesome). Благодаря продуманной архитектуре и открытому исходному коду вы всегда можете адаптировать его под свои нужды.
- Исходный код плагина: https://github.com/webitproff/hybridauth-cotonti
- Hybridauth — Документация и Библиотека. Официальный сайт: https://hybridauth.github.io/
- Плагин в маркетплейсе расширений для Cotonti https://abuyfile.com/ru/market/cotonti/plugs/hybridauth
- Форум и поддержка плагина находится в этом разделе
- Официальный форум Cotonti: https://cotonti.com/forums
- За идею взят плагин от trustmaster
Полезно, но может быть устаревшим частично или полностью
Created: 25 July 2026 Copyright (c) 2026 webitproff | https://github.com/webitproff
Товар без файла для загрузки
- Категория расширения
- Безопасность и аутентификация, Telegram-интеграции и мини-приложения
- Доступность
- Бесплатно
Обсуждение страницы в Telegram
Автор контента
Оффлайн
webitproff
Последняя авторизация: 26.07.2026 18:55
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 25.07.2026 05:08
- 26.07.2026 13:08
Рекомендуемые товары и услуги
Установка, интеграция и адаптация плагинов под Cotonti CMF
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.