Node.js 为什么我的passport express没有';你不再工作了?

Node.js 为什么我的passport express没有';你不再工作了?,node.js,express,cookies,session-cookies,pm2,Node.js,Express,Cookies,Session Cookies,Pm2,我在CentOS 7服务器上运行了一个网站,我使用pm2进行生产,当我运行pm2日志时,会显示: "Warning: connect.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process." 这很有效,并且经过了身份验证,但5天后,这只在我的电脑上进行身份验证,如果

我在CentOS 7服务器上运行了一个网站,我使用pm2进行生产,当我运行pm2日志时,会显示:

"Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak memory, and will not scale past a single process."
这很有效,并且经过了身份验证,但5天后,这只在我的电脑上进行身份验证,如果我在另一台电脑上尝试,我的登录将无法进行身份验证(工作),并将我重定向到登录页面。为什么会发生这种情况?我发现了一些关于cookies会话的信息,cookie会话是我需要的吗?如果是,我如何使用它? 对不起,我的英语不好,谢谢。我的代码:

  const express = require('express')
  const bodyParser = require('body-parser')
  const mongoose = require('mongoose')
  const session = require('express-session')
  const passport =  require('passport')
  const passportLocalMongoose =  require('passport-local-mongoose')
  const _ = require('lodash')
  const app = express()
  app.use(express.static('public'))
  app.set('view engine', 'ejs')
  app.use(bodyParser.urlencoded({
      extended: true
  }))
  mongoose.connect("mongodb+srv://admin-Admin:password@cluster0-babnh.mongodb.net/collection", 
  {useNewUrlParser: true, useUnifiedTopology: true}).then(() => console.log('DB 
  Connected!')).catch(err => {
      console.log(err.message)
  })
  mongoose.set('useCreateIndex', true)

  app.use(session({
      secret: restricted.expressSession.secret,
      resave: false,
     saveUninitialized: false
  }))

  app.use(passport.initialize())
  app.use(passport.session())

  const userSchema = new mongoose.Schema ({
      email: String,
      password: String
  })

 userSchema.plugin(passportLocalMongoose)

 const User = new mongoose.model('User', userSchema)

 module.exports = mongoose.model('User', userSchema)

  passport.use(User.createStrategy())
  passport.serializeUser(User.serializeUser())
  passport.deserializeUser(User.deserializeUser()) 

 app.get('/', (req, res) => {
      res.render('login')
  })

 app.post('/', (req, res) =>{
      const user = new User({
          username: req.body.username,
          password: req.body.password
      })
      req.login(user, function(errLogin){
          if(errLogin) {
              console.log(errLogin)
          } else{
              passport.authenticate('local')(req, res, function(){
                  res.redirect('/home')
              })
          }
     })
  })

在mongoose.set之后,我放了这个: 应用程序使用(cookieSession)({ 最大值:24660*1000,//24小时 密钥:[受限。cookieSession.keys] }))

但仍会出现这样的消息:“警告:connect.session()MemoryStore不可用。” 专为生产环境设计,因为它会泄漏内存,并且不会扩展到单个进程。” 我还能换什么

var mongoUri = 'mongodb://username:password@foo.mongohq.com/port/db'

app.use(session({
      secret: restricted.expressSession.secret,
      resave: false,
      saveUninitialized: false
      store   : new MongoStore({url  : mongoUri})
}))

使用
连接mongo
模块在mongoDb中存储express会话。

您的登录功能在哪里。?我的登录函数位于问题的底部:const user=new user({username:req.body.username,password:req.body.password})req.login(user,function(errLogin){if(errLogin){console.log(errLogin)}else{passport.authenticate('local')(req,res,function(){res.redirect('/home')}})或者你是说html?看看这里..“”,我认为这是服务器问题,你需要将会话存储在数据库中。看看这里寻找更好的解决方案。我应用了这个,但我不确定它是否正确。如果我在登录函数的底部放一个next(),有什么区别吗?next()调用下一个中间件。您需要将您的会话存储在数据库中,在您的情况下,它存储在主内存中,这就是显示此警告的原因。您可以使用redis存储会话或mongodb。详细回答链接谢谢,Muhammad!在阅读此内容后,我选择了MongoStore,但我写下:saveUninitialized:true,store:new MongoStore({mongooseConnection:mongoose.connection}),……非常感谢!不,警告消息持续。登录速度非常慢。两者之间的区别是:resave:false或true saveUninitialized:false或true?请阅读此内容