TYPO3: отключить кеш для определенного плагина / расширения

Я построил расширение и плагин, где пользователи frontend могут редактировать свой профиль, но я заметил критическую проблему:

В разделе "Редактировать профиль" пользователи могли видеть полную информацию о другом пользователе, который даже не вошел в систему. Видимо, форма была кэширована на сервере, потому что после добавления:

config.no_cache = 1

это не повторилось Теперь проблема в том, что индексация отключена на всем сайте.

Есть ли способ отключить кэширование только для этого конкретного расширения / плагина?

2 ответа

Решение

Вы должны иметь что-то подобное в вашем ext_localconf.php:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        $_EXTKEY,
        'List',
        array('User' => 'list,editProfil'),
        array('User' => 'editProfil') // Uncached actions
);

Вот где это объясняется: https://docs.typo3.org/typo3cms/ExtbaseFluidBook/4-FirstExtension/7-configuring-the-plugin.html

Если вы хотите, чтобы это применялось только на определенных страницах или контролировалось интеграторами, вы можете переопределить инструкцию рендеринга TS для объекта:

tt_content.list.20.YOURLISTTYPEHERE = USER_INT

Или, если вы зарегистрировали его как пользовательский CType:

tt_content.YOURCTYPEHERE.20 = USER_INT

Вышесказанное должно работать для Fluid_styled_content и css_styled_content.

Практически никогда не рекомендуется использовать config.no_cache = 1 поскольку, как вы выяснили, это отключает многие вещи, кроме простого кеширования. Он также отключает все кэширование для всей страницы, и для производительности почти всегда лучше, чтобы конкретный плагин не кэшировался - и, если это возможно, делать это только на страницах, где плагин используется для визуализации представлений, которые не должны кэшироваться.

Будьте осторожны, если вам в конечном итоге придется кэшировать некоторые части вашего представления. Это не серебряная пуля с точки зрения безопасности, но это хорошее начало, чтобы всегда включать идентификатор пользователя (и, возможно, другие вещи из аутентификации) в любые идентификаторы кэша. И старайтесь не хранить конфиденциальную информацию в кеше в любой момент, включая код, в который вы выводите такие вещи, как имя пользователя.

Другие вопросы по тегам