首页 > 解决方案 > 如何防止缓存 Asp.NET PWA 防伪令牌?

问题描述

我有一个渐进式 Web 应用程序,它使用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

但是,这并没有解决我的问题。任何想法将不胜感激!

标签: asp.net-mvcservice-workerprogressive-web-appsantiforgerytokensw-toolbox

解决方案


推荐阅读