Как предотвратить кэширование токена защиты от подделки Asp.NET PWA?
У меня есть прогрессивное веб-приложение, которое использует sw-toolbox для управления кэшированием ресурсов.
Страница входа (/user/login? Returnurl=xxxx) требует токен защиты от подделки, поэтому я настроил маршрутизатор sw-toolbox следующим образом, чтобы гарантировать, что кэшированная версия содержимого страницы не будет возвращена:
toolbox.router.any("/user/*", toolbox.networkOnlyCustom);
где networkOnlyCustom
Метод использует networkOnly
встроенный метод с предупреждением для возврата кэшированной страницы "извините, вы не в сети", если пользователь не в сети (см. ниже):
toolbox.networkOnlyCustom = function (req, vals, opts) {
return toolbox.networkOnly(req, vals, opts)
.catch(function (error) {
if (req.method === "GET" && req.headers.get("accept").includes("text/html"))
return toolbox.cacheOnly(new Request("/home/offline"), vals, opts);
throw error;
});
};
Однако то, что я вижу, это сообщение об ошибке "Токен cookie для защиты от подделки и токен поля формы не совпадают". Не все время, хотя! На самом деле, если пользователь видит эту ошибку, затем нажимает "Назад" в браузере и снова отправляет форму, он входит в систему просто отлично.
Я предположил, что причина этого в том, что браузер (в моем случае Chrome 71) кэширует страницу входа. Поэтому я добавил следующие HTTP-заголовки ответа в надежде, что браузер будет подчиняться:
cache-control: no-cache, no-store, no-store, must-revalidate
expires: -1
pragma: no-cache
Тем не менее, это не решило мою проблему. Любые идеи будут наиболее ценными!