node.js - 生产环境中 node.js 应用程序中 connect.sid 和会话的问题
问题描述
节点应用程序使用passport-ldap 进行身份验证,问题是它在开发环境中就像一个魅力,但在生产环境中存在问题。当路由被更改时,我失去了用户的会话,因为应用程序的 connect.sid(cookie)正在被更改,因为我有一个新的 setCookie 响应。
我正在使用express 4.17.1和express-session 1.16.2,所以从我的研究中我发现我不必使用 cookieParser。我还认为用户和护照功能的序列化和反序列化没有问题。
// Static folder set
app.use(express.static(path.join(__dirname, 'public')));
// Body parser middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.set('trust proxy', 1) //trust first proxy
// Express session midleware
app.use(session({
secret: 'abc',
resave: true,
saveUninitialized: true,
cookie: { secure: true }
}));
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
...
// Use routes of the application
app.use('/users', users);
解决方案
我找到了解决方案并将其发布以供将来参考,以防其他人面临类似问题。
我使用了 cors 模块并像这样设置它
app.use(cors({credentials: true}));
同样在生产环境中,您必须使用商店来保存 cookie。这很明显,但我错过了。所以我用
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'abc',
resave: false,
saveUninitialized: false,
cookie: { secure: true,
maxAge: 6*60*60*1000 },
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
推荐阅读
- jenkins - 使用 List Groovy 中的 collectEntries 创建并行阶段 Map
- vscode-settings - VSCode 可以在 windows 7 上很好地调试代码吗?
- javascript - 如何在三个js中将对象放入画布内
- python - 检查数据框中是否存在具有正确值的行,如果不存在则追加
- php - 致命错误:未捕获的错误:调用 view-thread.php:46 中字符串上的成员函数 fetch_array() 堆栈跟踪:第 46 行抛出 #0 {main}
- c++ - 最终链接失败:设备 collect2.exe 上没有剩余空间:错误:ld 返回 1 退出状态
- mysql - 无法连接到在 WSL2 中运行的 MySQL 服务器
- android - 自定义 TextInputLayout 类,在布局文件中使用时有额外的上边距
- javascript - 如何在画布 3D 上创建网格并在 x 秒后将其销毁?
- c - 无法进入特定的开关盒