我正在尝试在服务器上的会话中保存一些数据,每条路由都将使用该数据将分析数据发送到另一个微服务。
因此,我正在接收一些数据,并创建了一个中间件,该中间件将使用所需的数据获取令牌。所以在我的主文件上有这个:
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()
}
如您所见,我只希望中间件在到达首页时保存会话,因为我只打开首页上的令牌。 所以我要在会话中保存一个phoneNumber。 但是,当我尝试打路线时:
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。有人知道为什么吗?
这是服务器端的反应应用程序。