Support csrf tokens in Vue app
This commit is contained in:
@@ -56,7 +56,7 @@ const books = Vue.createApp ({
|
|||||||
} catch (err) { books.user = { id: err.message } }
|
} catch (err) { books.user = { id: err.message } }
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}).mount("#app")
|
}).mount('#app')
|
||||||
|
|
||||||
books.getUserInfo()
|
books.getUserInfo()
|
||||||
books.fetch() // initially fill list of books
|
books.fetch() // initially fill list of books
|
||||||
@@ -65,3 +65,25 @@ document.addEventListener('keydown', (event) => {
|
|||||||
// hide user info on request
|
// hide user info on request
|
||||||
if (event.key === 'u') books.user = undefined
|
if (event.key === 'u') books.user = undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
|
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'])
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,8 +17,7 @@
|
|||||||
"source": "^/(.*)$",
|
"source": "^/(.*)$",
|
||||||
"target": "$1",
|
"target": "$1",
|
||||||
"destination": "srv-api",
|
"destination": "srv-api",
|
||||||
"authenticationType": "xsuaa",
|
"authenticationType": "xsuaa"
|
||||||
"csrfProtection": false
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user