fix : redirige sur le login sur une 401 et reset du auth state + doc + timeout du toaster
This commit is contained in:
@@ -29,6 +29,7 @@ export const useApi = (): ApiClient => {
|
||||
const toast = useToast()
|
||||
const auth = useAuthStore()
|
||||
const nuxtApp = useNuxtApp()
|
||||
let isHandlingUnauthorized = false
|
||||
const i18n = nuxtApp.$i18n as
|
||||
| {
|
||||
t: (key: string) => string
|
||||
@@ -95,7 +96,23 @@ export const useApi = (): ApiClient => {
|
||||
})
|
||||
}
|
||||
},
|
||||
onResponseError({ response, error, options }) {
|
||||
async onResponseError({ response, error, options }) {
|
||||
if (response?.status === 401) {
|
||||
const requestUrl = typeof options?.url === 'string' ? options.url : ''
|
||||
if (!requestUrl.includes('login_check') && !requestUrl.includes('logout')) {
|
||||
if (!isHandlingUnauthorized) {
|
||||
isHandlingUnauthorized = true
|
||||
auth.clearSession()
|
||||
const route = useRoute()
|
||||
if (route.path !== '/login') {
|
||||
await navigateTo('/login')
|
||||
}
|
||||
isHandlingUnauthorized = false
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
const apiOptions = options as ApiFetchOptions<'json'>
|
||||
if (apiOptions?.toast === false) {
|
||||
return
|
||||
|
||||
@@ -19,7 +19,7 @@ export default defineNuxtConfig({
|
||||
},
|
||||
toast: {
|
||||
settings: {
|
||||
timeout: 0,
|
||||
timeout: 10000,
|
||||
closeOnClick: true,
|
||||
progressBar: false
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@ export const useAuthStore = defineStore('auth', {
|
||||
isAuthenticated: (state) => Boolean(state.user)
|
||||
},
|
||||
actions: {
|
||||
clearSession() {
|
||||
this.user = null
|
||||
this.checked = true
|
||||
this.isLoading = false
|
||||
},
|
||||
async ensureSession() {
|
||||
if (this.checked) {
|
||||
return this.user
|
||||
|
||||
Reference in New Issue
Block a user