Я пытаюсь создать элементарную функцию входа в систему и проверить, создает ли она сеанс, который я могу использовать позже. Я использую экспресс-сеанс и Redis для сохранения данных сеанса. Вот моя установка:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(express.static(path.join(__dirname, 'client/build')))
app.use(cookieParser(process.env.COOKIE_SECRET))
app.use(session({
store: new redisStore({
host: '127.0.0.1',
port: 6379
}),
secret: process.env.SESSION_SECRET,
cookie: {maxAge: 1800},
name: 'appName',
resave: false,
saveUninitialized: false
}))
app.use('/', routes)
Тогда мой маршрут входа:
router.post('/api/login', (req, res) => {
req.session.userId = req.body.id
req.session.email = req.body.email
//do I need to send out a cookie with the session created here?
res.set({'Set-Cookie': 'appSession=' + req.session.id})
res.status(200).send({
"message": `User ${req.body.id} logged in with cookie ${req.session.id}`
})
})
Тогда, насколько я понимаю, я должен иметь возможность читать и добавлять в этот сеанс любые запросы, в которых я отправляю файл cookie обратно. Вот мой API для проверки:
router.post('/api/test' (req, res) => {
if(req.session && req.session.userId) {
res.status(200).send({"message": `User ID ${req.session.userId} is authenticated`})
} else {
res.status(401).send({"message": `User ID ${req.session.id} is not authenticated`})
}
})
Я отправляю запрос к этому API, используя Postman с заголовком Cookie: appName=${sessionID}
, используя идентификатор сеанса, созданный в маршруте api/login
. Это всегда создает новый идентификатор сеанса и возвращает ошибку 401.
Правильно ли я понимаю? Если да, то как мне создать это ожидаемое поведение?