如何解决使用Nextjs应用程序闲置1分钟后,Openlitespeed会话超时
你好Stackoverflow社区。 p>
因此,当使用openlitespeed托管由express驱动的nextjs时,我遇到了一个非常奇怪的问题。除了一件事情-会话的身份验证外,一切都在生产中运行良好。该用户被错误地保存在cookie中,并且如果您所在页面上的空闲时间不超过一分钟,该用户将可以正常工作,但是如果空闲时间超过一分钟,则即使该cookie也不对请求进行身份验证还在那里。
我正在将Redis用于我的cookie存储,并且一切都在本地测试中起作用,而openlitespeed尚未预先设置。我正在使用的身份验证是带有Express会话的Passportjs。你们中有人遇到过这个问题吗?如果是这样,您是如何解决的? 我曾尝试禁用缓存模块,将所有超时设置为更高的值或禁用它们,使用其他内存存储等等,但是没有运气。这是server.js文件,但是,我不认为它与代码本身有关,而与openlitespeed的配置有关:
const express = require('express')
const next = require('next')
const passport = require('passport');
const redis = require('redis')
const session = require('express-session')
const {v4: uuidv4} = require('uuid');
const path = require('path');
const log = require('./logger')
let RedisStore = require('connect-redis')(session)
let redisClient = redis.createClient()
const port = parseInt(process.env.PORT,10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
const server = express()
//Json parsing
server.use(express.json());
server.use(express.urlencoded({extended: true}));
if (dev){
//Express session
server.use(session({
store: new RedisStore({ client: redisClient }),genid: function() {
return uuidv4()},secret: uuidv4(),resave: false,saveUninitialized: false,cookie: {
secure: false,maxAge: 86400000
}
}))
}
else{
//Express session
server.use(session({
store: new RedisStore({ client: redisClient }),proxy: true,cookie: {
secure: true,maxAge: 86400000
}
}))
}
//Passport auth
server.use(passport.initialize());
server.use(passport.session());
//Import of the passport config
const initializePassport = require('./passport-config');
initializePassport(passport);
//Login route
server.post('/login',passport.authenticate('login'),(req,res) => {
res.send({message: 'Successful login',login: true})
});
const passportLogout = function (req,res,next) {
req.logout()
next()
}
//Logout route
server.get('/logout',passportLogout,res) => {
req.session.destroy();
res.redirect('/login');
});
//Import registrerings route. Pga. brugen af route i stedet for app kan vi bruge denne middleware med en anden underside,hvis vi f.eks. ville gøre så admins også kunne lave brugere.
const registerRoute = require('./routes/register-user');
server.use('/register',registerRoute);
//User routes hvor login er required. Rendering. Skal stå under called til initializepassport,ellers kan den ikke finde ud af at den er authenticated via passport,og auth.js returnerer dig derfor til login
const usersRoutes = require('./routes/user/user-routes');
server.use(usersRoutes);
//Admin routes til rendering
const adminRoutes = require('./routes/admin/admin-routes');
server.use(adminRoutes);
const indexRoutes = require('./routes/index-routes');
server.use(indexRoutes);
server.all('*',res) => {
return handle(req,res)
})
server.listen(port,(err) => {
if (err) throw err
log.logger.log({
level: "info",message: `Server was started on ${port}`,additional: "properties",are: "passed along",});
console.log(`> Ready on http://localhost:${port}`)
})
})
解决方法
好的,所以我终于明白了。设置了Openlitespeed的配置,以便它可以创建任意数量的httpd辅助程序。因此,当创建一个新的请求并将请求移交给该请求时,似乎没有进行身份验证。我已通过在服务器配置->服务器进程->工作人员数下将“工作人员数”设置为1来解决此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。