From 6e7dc8ef6a8e6dd84f636210043cf7bc676cc906 Mon Sep 17 00:00:00 2001 From: Vladislav Leonkev Date: Thu, 12 Dec 2024 16:03:44 +0100 Subject: [PATCH] Reviews app: provide csrfToken --- reviews/app/vue/app.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/reviews/app/vue/app.js b/reviews/app/vue/app.js index 02a4ae6d..f7dc8226 100644 --- a/reviews/app/vue/app.js +++ b/reviews/app/vue/app.js @@ -69,3 +69,25 @@ const reviews = Vue.createApp ({ // initially fill list of my reviews reviews.fetch() + +axios.interceptors.request.use(csrfToken) +function csrfToken (request) { + if (request.method === 'head' || request.method === 'get') return request + if ('csrfToken' in document) { + request.headers['x-csrf-token'] = document.csrfToken + return request + } + return fetchToken().then(token => { + document.csrfToken = token + request.headers['x-csrf-token'] = document.csrfToken + return request + }).catch(() => { + document.csrfToken = null // set mark to not try again + return request + }) + + function fetchToken() { + return axios.get('/', { headers: { 'x-csrf-token': 'fetch' } }) + .then(res => res.headers['x-csrf-token']) + } +}