Express-Session不会持续存在/即使在会话选项中有存储选项,生产环境中的工作也

时间:2019-02-17 12:38:24

标签: javascript heroku google-cloud-firestore session-cookies express-session

我看到了很多有关此问题的帖子,但找不到答案。 在许多帖子中,答案都是有会话存储的。

在我的项目中,我正在进行会话-存储,但问题仍然存在 坚持

我正在使用connect-session-firebase和Firestore来存储会话,但是仍然无法获得持久会话。

即使在开发阶段,它在开发中也能正常工作,但在生产中却无法正常工作 会话存储

我的代码 server.js

const session = require('express-session')
const cors = require('cors')
const helmet = require('helmet')
const { port , sessionSecretKey} = require('./configs/config')
var cookieParser = require('cookie-parser')
var flash = require('connect-flash');

const { store} = require('./configs/sessionStorage/firebaseSessionStorage')
const {dbname,MONGODB_URL,sessionKeys} = require('./configs/config.js')
//database connection
mongoose.connect(MONGODB_URL,{
  useNewUrlParser: true
});
const app = express();

app.use(helmet());

app.use(bodyParser.urlencoded({extended: true, limit: '50mb'}))
app.use(bodyParser.json({limit: '50mb'}))

app.use(cookieParser());

app.use(session({
  store,
  secret: sessionSecretKey,
  resave: true,
  saveUninitialized: true,
  cookie: {
    secure: process.env.NODE_ENV == "production" ? true : false ,
    maxAge: 1000 * 60 * 60 * 24 * 7
  }
}));

现在,我已经为每个请求创建了一个中间件,只是为了计算使用会话的视图

app.use(function(req,res,next){

  res.locals.user = req.user || null;
  if(req.session.views){
    req.session.views += 1
    req.session.save();
  }else{
    req.session.views = 1
    req.session.save();
  }
  console.log('req.session.views', req.session.views)
  next();
})

在生产中提供输出req.session.views 1

PM2脚本开始 pm2-runtime start ecosystem.config.js --env production

ecosystem.config.js

module.exports = {
  apps : [{
    name: 'server',
    script: 'server.js',
    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    instances: 2,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

此外,在对用户进行身份验证时,它也不能保留该用户。 甚至firestore集合(即会话数据库)都充满了生产和开发过程中的会话,但会话仍未持久

感谢您的时间

0 个答案:

没有答案