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