繁体   English   中英

快速会话无法检索会话变量

[英]express-session unable to retrieve session variable

我正在使用 express-session 将我的会话持久地存储在 MongoDB 数据库中。

该项目在开发环境中运行良好,但由于某些原因,在成功登录的情况下保存的会话变量未发送到生产环境中的前端(未定义):

server.js [后端]

const express = require('express');
const app = express();
const controllers = require('./controllers/adminControllers');
const router = require('./router/adminRouter');
const bodyParser = require('body-parser');
const cors = require('cors');
const dotenv = require('dotenv').config()
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);




app.use(cors({
origin: 'http://localhost:3000',
optionsSuccessStatus: 200, 
credentials:true
}))

var store = new MongoDBStore({
uri:process.env.MONGO,
collection:'mySessions'
})

store.on('error',function(error){
console.log('session error');
});

app.use(require('express-session')({
secret:'justasecret',
cookie:{maxAge:1000 * 60 *60 *24*7},
store:store,
resave:true,
saveUninitialized:true
}))

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

app.use((req,res,next)=>{
console.log(req.session);
next()
})

app.use('/', router);

app.listen(process.env.PORT || 3001); 

login_controller.js [后端]

                                req.session.isLogged =true;
                                req.session.user = user;
                                req.session.save()
                                res.json({success:true});

从上面的代码中可以看出,会话变量持久地存储了用户对象,用户对象确实保存在 MONGO 数据库中,但显然没有被检索到。

get_user_frontend [前端]

fetch('https://backend-server/get_user',{
credentials:'include',

})

get_user_controller.js [后端]

exports.getUser = (req,res,next)=>{

if(req.session.isLogged===false){
return res.json({user:{isLogged:false}})
}return res.json(req.session)}

上述中间件负责在每次前端调用时发送用户数据,但由于某种原因 res.session.isLogged 以及 req.session.user 对象未定义。

我能够从 req.session 变量中检索的唯一数据是:

cookie: {originalMaxAge: 604800000, expires: '2022-05-14T07:56:24.626Z', httpOnly: true, 
path: '/'}

虽然在 MongoDB 数据库中数据被正确存储:

_id:"LfoXW1yf_E8gLMyMLtlesuBVevVAJjm9"
expires:2022-05-13T09:05:59.386+00:00
session:Object
cookie:Object
isLogged:true
user:Object

我不明白为什么会话变量不会在后端持久存在,即使它正确存储在数据库中。

我实际上解决了在 express-session cookie 配置中进行以下更改的问题:

app.set("trust proxy", 1);  //<--
app.use(session(  
{

secret: 'iamjustasecret',
store: store,
maxAge:100000,
proxy:true,    // <----
  cookie: {
  httpOnly:true,
  sameSite: process.env.NODE_ENV === "production" ? 'none' : 'lax',  //<--
  secure: true

}}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM