Express Обслуживание сессии для всех - PullRequest
0 голосов
/ 13 февраля 2020

У меня проблема с сеансом 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
    }  ```

...