使用nuxtServerInit

时间:2019-11-19 09:13:35

标签: nuxt.js akamai

使用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__变量中?

2 个答案:

答案 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