在多个dynos heroku应用程序上设置快速应用程序的会话
我已经使用express(node.js)+ mongodb在单个Heroku dyno上实现了一些用户authentication,一切工作正常。 然而,当我增加dynos的数量(超过1),我无法login,我一直在我的login页面redirect,这意味着我的会议尚未设置。 这是我的代码:
checkCookies = function(req,res,next){
if(req.session.user){ res.locals.user = req.session.user; next(); } else{ res.redirect('/login'); } }; app.use(express.cookieParser()); app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', cookie: {httpOnly: true, maxAge:14*24*60*60*1000} }));
使用mongodb处理express / node.js上共享会话的最佳解决scheme是什么?
connect-mongo应该满足你的需求: https : //github.com/kcbanner/connect-mongo
使用连接mongo模块与快递。
var http = require('http'), express = require('express'), session = require('connect-mongo')(express)
然后在你的员工安装会议上进行外部存储。 下面的代码将使用来自mongo,cookie和额外头的会话,以允许跨域和jsonp。
app.configure(function() { app.use(express.cookieParser()); app.use(express.session({ store: new session({ db: 'sessions' }), secret: 'yoursecret', cookie: { path: '/', maxAge: 1000 * 60 * 60 * 24 // 1 day } })); app.use(function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'); next(); }); app.set('jsonp callback', true); });
上面的答案是误导,因为它们暗示你不能在Heroku上的多个dynos上共享基于cookie的会话。
如果我使用cookie会话而不是快速 会话 ,我可以跨多个dynos使用基于cookie 的会话 。 在这个线程的第一篇文章中缺less的是秘密值不被传递给cookieparsing器。 这意味着每当进程重新启动或新的testing仪启动时,节点将为parsing器分配一个随机哈希。
做以下工作对我来说:
app.use(express.cookieParser('0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK')); app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', cookie: {httpOnly: true, maxAge:14*24*60*60*1000} }));
- Express-session和express-socket.io-session在angular2 / typecript环境中不起作用
- 基于令牌的身份validation和浏览器上的会话/本地存储
- redis会议继续开始
- 使用req.login()刷新passport.js会话数据
- socket.io通过多个服务器没有redis
- 会话variables不存储在node.js中
- Express SessionID与Cookie中的SessionID不同
- 使用Express.js v4和Socket.io v1进行会话
- client-sessions nodejs / Express – 错误:无法设置未定义的属性“mydata”