[英]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.