Если сертификат генерируется с чужим именем, это подрывает доверие к обучающей платформе и может раскрыть данные другого пользователя. Обычно ошибка находится в кеше шаблона, очереди генерации 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, права на скачивание и перегенерировать ошибочные документы.