Сейчас я работаю над приложением React / Redux с полным стеком и работаю над настройкой аутентификации JWT и передачей JWT с помощью файлов cookie. У меня была пара вопросов по обработке токена CSRF, сгенерированного сервером.
1) После установки токена CSRF на стороне сервера он передается клиенту? Как именно это проходит? (Я видел примеры, когда это передавалось как объект, но те, которые я обнаружил, не были объяснены очень хорошо или просто недостаточны)
server.js
// config csrf in server
app.use(csrf({
cookie: {
key: '_csrf',
secure: true,
httpOnly: true,
sameSite: 'strict',
maxAge: 86400
}
}))
// Hits my api routes, and if these arent hit, the index.html file is rendered
app.use(routes)
// Route used to fetch the index html file
app.get('*', (req, res) => {
let csrfToken = req.csrfToken()
console.log(csrfToken) // This doesnt console log anything on the server side
res.sendFile(path.join(__dirname, "./client/build/index.html"), {
_csrf: csrfToken
})
})
2) Как только токен CSRF установлен, должен ли он храниться в состоянии приложения (хранилище Redux) для постоянного хранения? Или это будет ненужным?
3) На стороне клиента, когда я буду готов отправить данные в маршрут через запрос POST, если я правильно понимаю, вам нужно будет включить скрытое поле ввода в переменную csrf, например:
<input type="hidden" name="_csrf" value=csrfToken/>
Поэтому, когда вы отправляете форму, вы включаете этот ввод, а затем в запросе post (при условии извлечения или axios) вы устанавливаете заголовки для включения этого токена csrf, чтобы сервер мог сравнить его с токен, который клиент отправляет на маршрут, я правильно понимаю?
Спасибо!