Если сертификат генерируется с чужим именем, это подрывает доверие к обучающей платформе и может раскрыть данные другого пользователя. Обычно ошибка находится в кеше шаблона, очереди генерации PDF или неправильной привязке ученика к результату курса.
Сначала остановите массовую генерацию сертификатов, если есть риск выдачи документов с неверными данными. Затем проверьте один конкретный путь: пользователь, курс, попытка, результат, шаблон и PDF-файл.
Что проверить в первую очередь
- Найдите id ученика, курса, попытки и сертификата с ошибкой.
- Проверьте, чьи данные записаны в базе, а чьи попали в PDF.
- Посмотрите, используется ли очередь или кеш для генерации сертификатов.
- Проверьте, не скачивает ли пользователь чужой уже готовый файл.
Основные причины
Такая проблема редко появляется сама по себе. Обычно ломается связка из нескольких настроек: данные уходят не туда, событие приходит не в том порядке, старая логика остается в кеше или права проверяются не на том уровне. Поэтому сначала нужно отделить симптом от причины.
- Шаблон PDF кеширует данные предыдущего пользователя.
- Файл сертификата сохраняется под неуникальным именем.
- Очередь генерации передает course_id без user_id или attempt_id.
- Проверка прав на скачивание файла отсутствует или неполная.
Пошаговая диагностика
- Сравните данные в профиле, результате курса и готовом PDF.
- Проверьте имя файла и путь хранения сертификатов.
- Посмотрите параметры задачи в очереди генерации.
- Проверьте параллельную генерацию двух сертификатов подряд.
- Проверьте прямую ссылку на файл под пользователем другого аккаунта.
Как исправить
Исправление лучше делать небольшими шагами. Сначала зафиксируйте текущее поведение, затем внесите одну правку, проверьте контрольный сценарий и только после этого переходите к следующему месту. Так проще понять, какая именно правка решила проблему.
- Передавайте в генератор полный контекст: user_id, course_id, attempt_id, certificate_id.
- Создавайте уникальное имя файла и не переиспользуйте PDF между пользователями.
- Очищайте состояние шаблонизатора между генерациями.
- Добавьте проверку прав при скачивании сертификата.
- Перегенерируйте ошибочные сертификаты после исправления причины.
Безопасный план решения
- Сделайте резервную копию файлов, базы или конфигурации, если правка затрагивает рабочий проект.
- Повторите ошибку на тестовом пользователе, заказе, заявке или окружении, чтобы не работать вслепую.
- Внесите минимальное изменение и сохраните возможность быстрого отката.
- Проверьте основной сценарий, крайние случаи и права доступа для разных ролей.
- После выкладки посмотрите логи и реальные события за первые часы работы.
Как проверить результат
- Два пользователя получают сертификаты со своими именами при параллельной генерации.
- Прямая ссылка чужого сертификата недоступна.
- PDF содержит данные из нужной попытки курса.
- Повторная генерация не подставляет старые данные из кеша.
Чего не стоит делать
- Не отключайте проверки, права, платежные статусы или защиту только ради быстрого исчезновения ошибки.
- Не правьте рабочую базу массовым запросом без выборки, бэкапа и понимания последствий.
- Не ориентируйтесь только на один успешный тест: проверьте повторный запуск, отмену, ошибку и нестандартные данные.
- Не оставляйте временные ключи, токены, debug-режим и лишний вывод в публичном доступе.
Как не допустить повторения
- Пишите тесты на генерацию документов для нескольких пользователей подряд.
- Не храните персональные PDF в публичной директории без проверки доступа.
- Логируйте параметры генерации сертификата.
- Разделяйте шаблон сертификата и пользовательские данные.
Что подготовить перед исправлением
- Ссылку на проблемную страницу, кабинет, заказ, интеграцию или API-метод.
- Точное время ошибки и пример пользователя, товара, платежа или запроса.
- Скриншот, текст ошибки, лог веб-сервера, приложения или webhook-события.
- Краткое описание ожидаемого поведения: что должно было произойти вместо ошибки.
Частые вопросы
Нужно ли удалять уже выданные сертификаты?
Если есть риск неправильных данных, да: нужно найти затронутые документы, перегенерировать их и закрыть доступ к ошибочным файлам.
Почему в интерфейсе имя правильное, а в PDF чужое?
Интерфейс и PDF могут брать данные из разных мест или PDF мог быть создан раньше с ошибочным кешем.
Когда стоит обратиться за помощью
Для диагностики нужны примеры сертификатов, доступ к очереди генерации и код шаблона PDF.
Итог
Сертификат должен генерироваться из точного контекста ученика и курса. Я могу исправить генерацию PDF, права на скачивание и перегенерировать ошибочные документы.