当我在端口8080
运行服务器
本地时,它在验证和序列化数据方面正常工作。但是当我在实时生产上运行代码时,是的,它通常会进行身份验证,但它不会将任何数据存储到会话中!
我想知道应该为此设置什么中间件?
express-session
中间件文档:
默认的服务器端会话存储 MemoryStore 是 故意不为生产环境设计。会漏的 在大多数情况下,内存不会超出单个进程, 用于调试和开发。
有关存储列表,请参阅兼容的会话存储。
生产环境中最流行的两种是:
我知道如何修复它,当我在项目中使用 local-passport 时,我遇到了这个错误。
解决方案如下:
if (process.env.NODE_ENV != "production") {
require('dotenv').config();
}
const express = require("express");
const app = express();
const cookieParser = require("cookie-parser");
const errorMiddleware = require("./middlewares/error");
const passport = require('./config/passport');
const session = require("express-session");
const cors = require("cors");
app.use(
cors({
origin: process.env.ORIGIN_URL,
methods: ["GET", "POST", "PUT", "DELETE"],
credentials: true,
})
);
const MongoStore = require("connect-mongo");
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
app.use(cookieParser());
app.use(express.json({ limit: '10mb' }));
app.set('trust proxy', 1);
app.use(session({
name: 'sportzpod',
secret: 'your_secret_key',
resave: false,
saveUninitialized: false,
store: MongoStore.create({
mongoUrl: process.env.DB_URL,
collectionName: 'sessions',
touchAfter: 24 * 3600
}),
cookie: {
secure: true,
httpOnly: true,
sameSite: isProduction ? "none" : "lax",
maxAge: 12 * 24 * 60 * 60 * 1000
}
}));
app.use(passport.initialize());
app.use(passport.session());
您必须设置“app.set('trust proxy', 1)”并将 CollectionName 指定为“(collectionName: 'sessions')”