У меня проблема с сеансом express, когда он будет обслуживать сеанс пользователей для всех. Даже если они никогда не посещали страницу, прежде чем они будут зарегистрированы как другой пользователь. Я не знаю, что вызывает это, и я не могу воспроизвести это. Это случилось один раз в этом месяце и один раз в прошлом месяце. Кажется, это начало происходить после того, как я обновил зависимости до последних версий, но я не вижу, где это могло вызвать эту проблему. Я не получаю ошибок. Исправления перезапуска приложения. Вот версии, которые я использую.
"express": "^4.17.1",
"express-session": "^1.17.0",
"express-socket.io-session": "^1.3.5",
passport": "^0.4.1",
"passport-steam": "^1.0.12",
"socket.io": "^2.3.0",
Вот мой код:
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const passport = require('passport')
const session = require('express-session')
const sharedsession = require('express-socket.io-session')
const SteamStrategy = require('passport-steam').Strategy
// Site stuff
const TradeBot = require('./lib/index')
const Trade = new TradeBot({ io })
const config = require('./config')
// Web server
server.listen(config.websitePort)
console.log('[!] Website server is online.')
console.log('[!] Socket server is online.')
// Passport
passport.serializeUser((user, done) => {
done(null, user)
})
passport.deserializeUser((obj, done) => {
done(null, obj)
})
passport.use(new SteamStrategy({
returnURL: `${config.website}/auth/steam/return`,
realm: `${config.website}/`,
apiKey: config.steamApiKey,
},
(identifier, profile, done) => {
process.nextTick(() => {
const user = profile
user.identifier = identifier
return done(null, user)
})
}))
const sessionMiddleware = session({
secret: 'asecret',
name: 'sitename',
resave: true,
saveUninitialized: true,
})
app.use(sessionMiddleware)
app.use(passport.initialize())
app.use(passport.session())
app.use('/static', express.static('./static'))
// Routes
app.get('/', (req, res) => {
res.sendFile(`${__dirname}/index.html`)
})
app.get('/support', (req, res) => {
res.sendFile(`${__dirname}/support.html`)
})
app.get('/guide', (req, res) => {
res.sendFile(`${__dirname}/faq.html`)
})
// Auth Routes
app.get('/auth/steam', passport.authenticate('steam'))
app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/auth/steam' }), (req, res) => {
// Successful authentication, redirect home.
res.redirect('/')
})
app.get('/logout', (req, res) => {
req.logout()
res.redirect('/')
})
// Sockets
io.use(sharedsession(sessionMiddleware))
io.on('connection', (socket) => {
let userObject = false
if (
typeof socket.handshake.session.passport !== 'undefined' &&
typeof socket.handshake.session.passport.user !== 'undefined' &&
typeof socket.handshake.session.passport.user.id !== 'undefined'
) {
userObject = socket.handshake.session.passport.user
} ```