我使用的应用程序已经具有自己的基础架构。任务是集成会话cookie机制。我花了很多时间来理解为什么客户端没有设置cookie。
I。简短地。
应用设置:
服务器:NodeJS 端口:8081
客户:VueJS 端口:8088
我使用模块“ express-session”来初始化服务器端的会话机制,并将cookie发送给客户端。客户尚未设置Cookie。
II。详细信息:
服务器的根文件是 index.js 。
我在其中执行以下操作:
插入express
模块:
const express = require('express')
cors
模块:const cors = require('cors')
cors
设置:app.use(cors({
origin: 'http://localhost:8088',
credentials: true
}))
然后我在 user.js 文件中初始化会话并接收客户端的连接:
插入express-session
模块:
const session = require('express-session')
const router = express.Router()
const EIGHT_HOURS = 1000 * 60 * 60 * 2
const {
SESS_NAME = 'sid',
SESS_LIFETIME = EIGHT_HOURS,
SESS_SECRET = 'test',
NODE_ENV = 'development'
} = process.env
const IN_PROD = NODE_ENV === 'production'
router.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
cookie: {
maxAge: SESS_LIFETIME,
sameSite: false,
// Must have HTTPS to work 'secret:true'
secure: IN_PROD
}
}))
router.post()
接收客户端查询应用程序客户端包含许多文件。客户端通过Axios模块将数据发送到NodeJS服务器。
我按此主题阅读了几篇文章,我想我所做的服务器端设置对于工作会话cookie机制已经足够了。那意味着那个问题在Vue方面。
我所做的:
我设置了所有文件,在这些文件中,Axios将数据发送到服务器,参数withCredentials为真值(withCredentials:true)以通过CORS限制。这没有帮助
App具有其他URL,用于访问生产NodeJS服务器。我在所有客户端文件中都设置了开发NodeJS服务器URL。这没有帮助
阅读本文:Vue forum。从本文中我了解到,需要通过axios.interceptors(StackOverFlow forum)解决此问题。我以为,如果此设置是在客户端的一个首页上设置的,则可能是cookie至少应该在此页面上有效。这没有帮助。 尝试设置如下设置:
axios.defaults.withCredentials = true
那:
axios.interceptors.request.use( function (config) {
console.log('Main interceptor success')
config.withCredentials = true;
return config;
},
function(error) {
// Do something with request error
console.log('Main interceptor error')
return Promise.reject(error);
}
)
这没有帮助
请告诉我应该朝哪个方向移动?是这样,在客户端的绝对所有页面上都必须进行axios.defaults.withCredentials = true
设置以初始化cookie机制吗?我想念什么细节?如果我从头开始设置会话cookie,则该机制有效。