passport.js 在实时生产服务器期间无法存储会话

问题描述 投票:0回答:2

当我在端口8080运行服务器

本地
时,它在验证和序列化数据方面正常工作。但是当我在实时生产上运行代码时,是的,它通常会进行身份验证,但它不会将任何数据存储到会话中!

我想知道应该为此设置什么中间件?

node.js session serialization passport.js middleware
2个回答
1
投票

根据

express-session
中间件文档:

默认的服务器端会话存储 MemoryStore 是 故意不为生产环境设计。会漏的 在大多数情况下,内存不会超出单个进程, 用于调试和开发。

有关存储列表,请参阅兼容的会话存储

生产环境中最流行的两种是:


0
投票

我知道如何修复它,当我在项目中使用 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')”

© www.soinside.com 2019 - 2024. All rights reserved.