From b548676fd38496df53ebe2a0a8aa906f745ada0f Mon Sep 17 00:00:00 2001 From: Flycro Date: Fri, 10 Nov 2023 14:00:43 +0100 Subject: [PATCH] feat(CSRF): Refresh Token on CSRF Error --- utils/$larafetch.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/$larafetch.ts b/utils/$larafetch.ts index 13cd2ba..e087d7a 100644 --- a/utils/$larafetch.ts +++ b/utils/$larafetch.ts @@ -9,6 +9,7 @@ export const $larafetch = $fetch.create({ async onRequest({ options }) { const { backendUrl, frontendUrl } = useRuntimeConfig().public const event = process.nitro ? useEvent() : null + let token = event ? parseCookies(event)[CSRF_COOKIE] : useCookie(CSRF_COOKIE).value @@ -46,17 +47,23 @@ export const $larafetch = $fetch.create({ }, async onResponseError({ response }) { const status = response.status + + if (status === 419) { + await initCsrf(true) + } if ([500].includes(status)) { console.error('[Laravel Error]', response.statusText, response._data) } }, }) -async function initCsrf() { +async function initCsrf(forceRefresh = false) { const { backendUrl } = useRuntimeConfig().public const existingToken = useCookie(CSRF_COOKIE).value - if (existingToken) { return existingToken } + if (existingToken && !forceRefresh) { + return existingToken + } await $fetch('/sanctum/csrf-cookie', { baseURL: backendUrl,