使用Nuxt时,我遇到了与授权(JWT)有关的缓存问题。
这是nuxtServerInit
操作,在其中设置访问令牌:
// store/index.js
import cookie from 'cookie';
export const state = () => ({
authCookie: 'MyAuthCookie',
});
export const actions = {
async nuxtServerInit({ dispatch, commit, state }, { req }) {
// Check for access token
const accessToken = req.headers.cookie &&
cookie.parse(req.headers.cookie)[state.authCookie];
// Set the access token, if there is one
if (accessToken) {
commit('auth/setAccessToken', accessToken);
}
},
};
accessToken
状态随后用于为此插件中的所有将来请求设置Authorization
标头:
// plugins/axios.js
export default function ({ app, store }) {
app.$axios.onRequest((config) => {
// Set the `Authorization` header for future requests if we're logged in
if (store.getters['auth/isLoggedIn']) {
config.headers.common.Authorization = `Bearer ${store.state.auth.accessToken}`;
}
});
};
Nuxt将客户端和服务器之间共享的数据存储在内联的window.__NUXT__
标记中的全局<script>
变量中,并且由于我正在积极地缓存有关页面(使用Akamai),因此访问令牌永远不会进行更新。
是否有更好的方法来处理此问题,并防止访问令牌被缓存?例如,访问令牌是否未写入__NUXT__
变量中?
答案 0 :(得分:1)
尝试在每个请求的标头下方添加,这样它就不会缓存标头
config.headers['Cache-Control'] = 'private, no-cache, no-store, must-revalidate';
答案 1 :(得分:0)
我唯一想到的就是在服务器端和客户端都填充商店。
nuxtServerInit已覆盖服务器端。
客户端可以通过客户端插件来完成,如此处所述:https://github.com/nuxt/nuxt.js/pull/4573#issuecomment-557857101