0

What I am trying to achieve

The basic idea is to send a user to another route when a cookie is received in the Nuxt router middleware.

The middleware is always called both on server-side and client-side, and it works perfectly in the dev environment.

The problem that happens only in production is that the server-side middleware never receives the cookie.


My attempt

The logic is simple: nuxtServerInit is called on the server before the router middleware is called. So it gets the cookie from the user and saves it in Vuex:

nuxtServerInit({ commit }, { req }) {
  const token = this.$cookies.get('test');
  commit('auth/setToken', { value: !!token}) }
}

Then, the router middleware is called and checks Vuex if the cookie is there to redirect the user:

export default function ({ store, route, redirect }) {
  if (route.path === '/' && store.getters['auth/getToken']) { redirect('/test'); }
}

Everything works perfectly fine locally, but upon deployment no redirection happens.
What am I missing?


More info

As that may be relevant, I am using a firebase cloud function to host my Nuxt ssr website:

exports.renderApp = functions.https.onRequest(async (req, res) => {
  res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
  await nuxt.ready(); nuxt.render(req, res);
});

I first thought it may be a cookie problem, but I tried setting them up with vanilla js, then (as implemented above) I tried cookie-universal-nuxt, as well as bypassing Vuex completely and checking the req.headers.cookie directly in the middleware. The result is always the same: works in dev, does not work in production.

nickh
  • 279
  • 3
  • 12

1 Answers1

1

Try to change the name of your cookie to __session.

You can find more info in this question.

  • Yes, it works in production! Thank you very much, @Łukasz. That firebase issue should be better documented, it currently is here: https://firebase.google.com/docs/hosting/manage-cache#using_cookies – nickh May 05 '22 at 10:57