Я пытаюсь сохранить некоторые данные в сеансе на моем сервере, которые каждый маршрут будет использовать для отправки аналитических данных в другой микросервис.
Итак, я получаю некоторые данные и создал промежуточное программное обеспечение, которое получит токен с нужными мне данными. так что в моем основном файле у меня есть это:
app.use(session({
secret: config.SERVER_SESSION_SECRET,
resave: true,
saveUninitialized: false,
cookie: { secure: false }
}))
app.use(middlewares.authenticator)
внутри промежуточного программного обеспечения У меня есть:
module.exports = (req, res, next) => {
if(req.path === '/'){
const { headers: { accesstoken } } = req
if (accesstoken) {
const tokenWithoutBearer = accesstoken.split(' ')[1]
const { msisdn } = jwt.verify(tokenWithoutBearer, formatKey(PUBLIC_KEY), { format: 'PKCS8', algorithms: ['RS256'] })
req.session.phoneNumber = msisdn
req.session.save((err) => err
? console.error('error saving session: ', err )
: console.log('session saved successfully!'))
}
}
next()
}
, как вы можете видеть, я хочу, чтобы промежуточное программное обеспечение сохраняло сеанс только тогда, когда оно достигает домашняя страница, так как я получаю токен только на домашней странице. Поэтому я сохраняю номер телефона в сеансе. Однако, когда я пытаюсь выбрать маршрут:
articles.get('/articles/:identifier', async (request, response) => {
try {
console.log(request.session) // cookie:{ path: '/', _expires: null, originalMaxAge: null, httpOnly: true, secure: false } }
const { hash, headers, params, session: { phoneNumber = '' } } = request
const { host } = headers
response.send('test')
} catch (error) {
console.error(error)
response.redirect('/')
}
})
Но на других маршрутах он никогда не возвращает phoneNumber, который я установил ранее. Кто-нибудь знает почему?
Кстати, это приложение на стороне сервера.