Node.js 为什么我的passport express没有';你不再工作了?
我在CentOS 7服务器上运行了一个网站,我使用pm2进行生产,当我运行pm2日志时,会显示: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天后,这只在我的电脑上进行身份验证,如果
"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?请阅读此内容