NUXTJS SSR:我的 nuxtServerInit 有问题,nuxtServerInit 的 req.headers.cookie 未定义,cookie 已经在我的浏览器中

我是 NuxtJS 的新手并且遇到了问题,我试图获取从网站登录的用户的令牌,令牌存储在 cookie 中,但是,当我启动或重新加载网站页面(使用 nuxt ssr (universal )),nuxtServerInit 应该并且确实启动,但是 req.headers.cookie 表示它未定义,因此无法将数据加载到存储中。如果我重新加载页面,cookie 仍在浏览器中并且一切正常,问题是 req.headers.cookie 是:未定义,为什么?啊哈,在开发中它工作得很好,但在生产中它不起作用(在 nuxtServerInit 中没有定义 req.headers.cookie)

我正在使用 Firebase 托管、云功能、身份验证、云 Firestore。

代码如下:

// store/index.js

import { getUserFromCookie,getUserFromSession } from '../helpers/index.js'

export const actions = {

    async nuxtServerInit({ app,dispatch },{ req,beforeNuxtRender }) {

        console.log('req.headers.cookie: ' + req.headers.cookie)
        console.log('req.session: ',req.session)

        if (process.server) {
            const user = getUserFromCookie(req)
            console.log('process.server: ' + process.server)
            console.log('user: ',user)
            if (user) {
                await dispatch('modules/user/setUSER',{
                    name: !!user.name ? user.name : '',email: user.email,avatar: !!user.picture ? user.picture : '',uid: user.user_id
                })
                await dispatch('modules/user/saveUID',user.user_id)
            } else {
                await dispatch('modules/user/setUSER',null)
                await dispatch('modules/user/saveUID',null)
            }
        }
    }

}

// helpers/index.js

import jwtDecode from 'jwt-decode'
var cookieparser = require('cookieparser')

export function getUserFromCookie(req) {
    if(req.headers.cookie){
        const parsed = cookieparser.parse(req.headers.cookie)
        const accessTokenCookie = parsed.access_token
        if (!accessTokenCookie) return

        const decodedToken = jwtDecode(accessTokenCookie)
        if (!decodedToken) return

        return decodedToken
    }

    return null
}

// pages/auth/signup.vue

<script>
import { mapactions } from 'vuex'

export default {
  data () {
    return {
      email: '',password: '',renderSource: process.static ? 'static' : (process.server ? 'server' : 'client')
    }
  },middleware: ['handle-login-route'],methods: {
    ...mapactions('modules/user',[ 'login' ]),async signUp () {
      try {
        const firebaseUser = await this.$firebase.auth().createUserWithEmailAndPassword(this.email,this.password)
        await this.writeUserData(firebaseUser.user.uid,firebaseUser.user.email)
        await this.login(firebaseUser.user)
        this.$router.push('/protected')
      } catch (error) {
        console.log(error.message)
      }
    },writeUserData (userId,email) {
      const db = this.$firebase.firestore()

      return db.collection("Usuarios").doc(userId).set({
        email: email
      })
    }
  }
}
</script>
// store/modules/user.js

export const actions = {

    async login({ dispatch,state },user) {
        console.log('[STORE actIONS] - login')
        const token = await this.$firebase.auth().currentUser.getIdToken(true)
        const userInfo = {
            name: user.displayName,avatar: user.photoURL,uid: user.uid
        }

        Cookies.set('access_token',token) // saving token in cookie for server rendering
        await dispatch('setUSER',userInfo)
        await dispatch('saveUID',userInfo.uid)
        console.log('[STORE actIONS] - in login,response:',status)

    },async logout({ commit,dispatch }) {
        console.log('[STORE actIONS] - logout')
        await this.$firebase.auth().signOut()

        Cookies.remove('access_token');
        commit('setUSER',null)
        commit('saveUID',null)
    },saveUID({ commit },uid) {
        console.log('[STORE actIONS] - saveUID')
        commit('saveUID',uid)
    },setUSER({ commit },user) {
        commit('setUSER',user)

    }

}

非常感谢! :D

web335 回答:NUXTJS SSR:我的 nuxtServerInit 有问题,nuxtServerInit 的 req.headers.cookie 未定义,cookie 已经在我的浏览器中

如果您在 Firebase 上托管它,您应该将您的 cookie 重命名为“__session”,这是您可以在 Firebase 上使用的唯一名称。他们的文档应该非常清楚! 更改以下部分:

// helpers/index.js
const parsed = cookieparser.parse(req.headers.cookie)
const accessTokenCookie = parsed.__session


// store/modules/user.js
Cookies.set('__session',token)
本文链接:https://www.f2er.com/646448.html

大家都在问