Версия модуля: 1.20.0
Дата патча: 2025-11-14
Автор: Claude Code
Проект: pim-drupal
Модуль CML Exchange не работает с Basic Authentication когда Drupal находится за reverse proxy (Nginx → Apache → PHP).
Причина:
Модуль ожидает переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'], но при работе через Nginx/Apache эти переменные не устанавливаются. Вместо этого доступна только $_SERVER['HTTP_AUTHORIZATION'] с закодированными credentials.
Модифицирован метод baseAuthUser() в файле src/Service/CheckAuth.php для поддержки парсинга заголовка HTTP_AUTHORIZATION.
Файл: src/Service/CheckAuth.php
Метод: baseAuthUser()
private function baseAuthUser() {
$user = FALSE;
// Парсинг HTTP_AUTHORIZATION заголовка
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$auth = [];
if (preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $auth)) {
[$auth_name, $auth_pass] = explode(':', base64_decode($auth[1]));
$user = [
'name' => $auth_name,
'pass' => $auth_pass,
];
}
}
return $user;
}
nano web/modules/contrib/cmlexchange/src/Service/CheckAuth.php
Найдите метод baseAuthUser() (примерно строка 50-60)
Замените весь метод на код выше
Очистите кэш:
drush cr
cp -r cmlexchange-patched /path/to/drupal/web/modules/contrib/cmlexchange
drush cr
drush config:set cmlexchange.settings auth 1 -y
drush config:set cmlexchange.settings auth-user '1c_exchange' -y
drush config:set cmlexchange.settings auth-pass '1C_Exchange_2025_Strong' -y
drush config:set cmlexchange.settings cmlmigrations 1 -y
drush config:set cmlexchange.settings debug 1 -y
drush cr
drush user:create 1c_exchange \
--mail='1c@0kt.ru' \
--password='1C_Exchange_2025_Strong'
drush user:role:add administrator 1c_exchange
Добавьте в конфигурацию Nginx:
location / {
proxy_pass http://backend;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
}
Перезагрузите Nginx:
sudo nginx -t
sudo systemctl reload nginx
curl -u "1c_exchange:1C_Exchange_2025_Strong" \
"https://your-domain.com/cmlexchange?type=catalog&mode=checkauth"
Ожидаемый ответ:
success
catalog
<UUID>
curl -u "1c_exchange:1C_Exchange_2025_Strong" \
"https://your-domain.com/cmlexchange?type=catalog&mode=init"
Ожидаемый ответ:
zip=no
file_limit=95000000
sessid=<SESSION_ID>
version=3.1
Сохранённая конфигурация находится в файле cmlexchange_config.yaml:
auth: 1 # Аутентификация включена
debug: 1 # Debug режим
auth-user: 1c_exchange # Логин
auth-pass: 1C_Exchange_2025_Strong # Пароль
auth-ip: '' # IP фильтр (пусто = все)
zip: 0 # ZIP сжатие отключено
file-path: cml # Папка для файлов
file-limit: 95000000 # Лимит размера файла (95MB)
cmlmigrations: 1 # Миграции включены
Путь:
Главное → Интеграция → Обмен с сайтом
Параметры подключения:
URL (изменения): https://your-domain.com/cmlexchange
URL (полная): https://your-domain.com/cmlexchange/full
Логин: 1c_exchange
Пароль: 1C_Exchange_2025_Strong
cmlexchange-patched/
├── README_PATCH.md # Эта документация
├── cmlexchange_config.yaml # Конфигурация
├── src/
│ └── Service/
│ └── CheckAuth.php # ✅ ИСПРАВЛЕН
├── cmlexchange.info.yml
├── cmlexchange.routing.yml
└── ...
ВНИМАНИЕ: При обновлении модуля через Composer патч будет перезаписан!
cd web/modules/contrib/cmlexchange
git diff > /path/to/library/drupal/cmlexchange-http-auth.patch
cd web/modules/contrib/cmlexchange
patch -p1 < /path/to/library/drupal/cmlexchange-http-auth.patch
Или: Используйте Composer Patches:
composer.json:
{
"extra": {
"patches": {
"drupal/cmlexchange": {
"Fix HTTP_AUTHORIZATION parsing": "patches/cmlexchange-http-auth.patch"
}
}
}
}
Причина: Basic Auth не доходит до модуля
Решение:
1. Проверьте Nginx конфигурацию (proxy_set_header Authorization)
2. Проверьте что патч применён (см. код метода baseAuthUser)
3. Проверьте логи: drush watchdog:show
Причина: Папка для файлов недоступна
Решение:
chmod 777 web/sites/default/files/cml
chown www-data:www-data web/sites/default/files/cml
Причина: Модуль cmlmigrations не настроен
Решение:
drush en cmlmigrations -y
drush cmlmigrations:rebuild
drush cr
| Дата | Версия | Описание |
|---|---|---|
| 2025-11-14 | 1.0 | Первая версия патча для HTTP_AUTHORIZATION |
Проект: pim-drupal
Workspace: /opt/claude-workspace
Документация: projects/pim-drupal/management/
Создано: 2025-11-15
Автор: Claude Code