无法访问 cookie 中的令牌 - req.cookies 返回未定义但设置了 cookie

问题描述

我在 Vuex 商店 (user.js) 中使用 vue-cookies 包进行突变以在客户端设置 cookie。它在登录时设置得很好(我用 console.log(document.cookie) 在我的浏览器控制台上检查了)。我在 Express 应用程序 (server.js) 中使用 cookie-parser 访问存储在 cookie 中的令牌时遇到问题 - req.cookies 返回 undefined。 有人知道为什么会这样吗?

user.js

import axios from 'axios'
import Vue from 'vue'
import VueCookies from 'vue-cookies'

export const mutations = {
  SET_USER_DATA(state,data) {
    let { token } = data
    VueCookies.set('token',token,{
      maxAge: 900000,path: '/',httpOnly: false,secure: false // <-- false here when served over HTTP
}); 
   },CLEAR_USER_DATA() {
    this.$cookies.remove('token') 
  },}

export const actions = {
  login({ commit },credentials) {
    return axios
      .post('//localhost:3000/login',credentials)
      .then(({ data }) => {
        setTimeout(() => {
          commit('SET_USER_DATA',data);
          // resolve();
        },1000);
      }),Vue.prototype.$cookies.set('token','',{ expires: 365 })
  },logout({ commit }) {
    commit('CLEAR_USER_DATA')
  }
}

server.js

import Express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import cookieParser from 'cookie-parser'
import { fetchAccountFromToken } from './helpers/token.js'

const app = Express()

app.use(bodyParser.json())
app.use(cors())
app.use(cookieParser())
app.use(app.router)
app.use(Express.static(__dirname + '/public'))
....

app.get('/products',{withCredentials: true},(req,res) => {
   let token = req.cookies.token
   console.log(token)

   let account = fetchAccountFromToken(token)
   console.log(account)

   let clientId = account.id
 
  var products = 'SELECT * FROM products WHERE client_id = ?' 
  con.query(products,[clientId],function(err,results) {
    if (err) throw err
    res.send(results)
  })
})

令牌.js

export function fetchAccountFromToken(token) {
    return JSON.parse(Buffer.from(token.split('.')[1],'base64').toString('utf-8'))['user']
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...