簡體   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