В приложении nuxt используется middleware для проверки авторизации пользователей. JWT токен для авторизации хранится в куки. При загруженном приложении, данные о пользователе хранятся в store (pinia) и защищенные роуты отображаются корректно при наличии авторизации, в том числе после перезагрузки страницы. Однако, если приложение собрать через generate, то при перезагрузки страницы происходит постоянный редирект, так как данные о пользователе отсутствуют в store. Если использовать уже загруженное приложение, то все работает корректно. При этом, если перезагружать на динамических страницах типа [id].vue, то также все работает.
Так и не могу понять в чем может быть проблема... Если кто-то сталкивался с подобным и нашел решение, буду благодарен
middleware/auth.js
import { useGlobalStore } from "@/stores/global"
const store = useGlobalStore()
export default defineNuxtRouteMiddleware(async (to, from) => {
if (!store.person) {
await store.getUserPerson()
}
if (!store.is_auth) {
return navigateTo("/", { replace: true })
}
})
store
export const useGlobalStore = defineStore("global", () => {
const is_staff = ref(false)
const is_auth = ref(false)
const person = ref()
const getUserPerson = async () => {
if (process.client) {
await myFetch("/auth/users/me/")
.then((res) => {
person.value = res
if (res.access_date) {
is_auth.value = true
}
is_staff.value = res.is_staff
})
.catch(() => {})
} else {
try {
const { data: persons, error } = await useMyFetch("/auth/users/me/")
if (persons && persons.value) {
person.value = persons.value
if (persons.value.access_date) {
is_auth.value = true
}
is_staff.value = persons.value.is_staff
}
} catch (e) {}
}
}
})