include/routes.php
Файл: include/routes.php
Назначение: Карта маршрутов проекта. Связывает URL-адреса с конкретными PHP-обработчиками. Является входной точкой для всех внутренних API-запросов и систем социальной авторизации.
Зависимости:
- Ядро:
Bitrix\Main\Routing\RoutingConfigurator,Bitrix\Main\Context. - Контроллеры:
Xpage\Core\Controller\...(Captcha, Authentication). - Сервисы авторизации:
Xpage\Core\Service\Authentication\...(VkId, YaId, SberId).
Внутреннее API (Внутренние сервисы)
Большинство роутов ведут напрямую в методы контроллеров. Битрикс автоматически вызывает метод названиеAction в указанном классе.
- Капча (ReCaptcha / SmartCaptcha):
POST /api-internal/recaptcha/validate: Проверка токена.GET /api-internal/recaptcha/key: Получение публичного ключа.
- Стандартная авторизация:
POST /api-internal/user/register: Регистрация.POST /api-internal/user/login: Вход.POST /api-internal/user/logout: Выход.POST /api-internal/user/password/recovery: Сброс пароля.
Социальная авторизация (OAuth 2.0)
Для каждого сервиса (VK, Yandex, Sber) реализовано два типа маршрутов:
- POST
.../link: Ведет в контроллер. Используется фронтендом для получения ссылки, на которую нужно перенаправить пользователя для входа. - GET
.../(Callback): Анонимная функция (замыкание). Это адрес, на который сервис (например, Сбер) возвращает пользователя после успешного ввода логина/пароля.- Логика: Извлекает
codeиstateиз запроса. - Безопасность: Проверяет
state === bitrix_sessid()для защиты от CSRF-атак. - Действие: Создает объект сервиса (
new SberId($code)) и вызываетAuthorize().
- Логика: Извлекает
Примеры использования
Обращение к API из JS (Фронт)
Когда пользователь нажимает "Войти", фронт делает запрос к роуту, описанному в этом файле:
// Запрос к роуту /api-internal/user/login
fetch('/api-internal/user/login', {
method: 'POST',
body: JSON.stringify({ login: '...', password: '...' })
});
Использование именованного роута (Бэкенд)
В коде можно получить URL роута по его имени (заданному через ->name()):
use Bitrix\Main\Application;
$router = Application::getInstance()->getRouter();
// Получим "/api-internal/user/sber-id"
$url = $router->route('xpage_core_auth_sber_id');
Особенности реализации
- Слеши в URL: Для каждого метода прописано два варианта — со слешем на конце и без него (например,
/validate/и/validate). Это гарантирует работу API при любых настройках фронтенда. - Инкапсуляция: Вся сложная логика авторизации через соцсети вынесена в соответствующие сервисы, роуты лишь принимают входящие данные (
code) и передают их дальше. - Контроль сессии: В callback-роутах обязательно проверяется
bitrix_sessid(), чтобы гарантировать, что ответ от соцсети пришел в рамках той же сессии, в которой он был инициирован.