fix: auth redirects and routing context issues

This commit is contained in:
2026-06-13 10:22:00 +02:00 Unverified
parent 1dbbfbaa2e
commit ca866404af
6 changed files with 17 additions and 16 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ const { isAuthenticated, user, logout } = useAuth()
<div class="header-slim-right-zone" role="navigation">
<!-- Utente Autenticato: Bottone Utente + Bottone Esci -->
<div v-if="isAuthenticated" class="d-flex align-items-center gap-2">
<NuxtLink class="btn btn-primary btn-icon btn-full" to="/dashboard"
<NuxtLink class="btn btn-primary btn-icon btn-full" to="/me"
data-element="personal-area-dashboard" data-focus-mouse="false">
<span class="rounded-icon" aria-hidden="true">
<BIIcon name="it-user" />
+3 -2
View File
@@ -2,7 +2,8 @@ import { defu } from 'defu'
export const useApiFetch = <T>(request: string, options: Parameters<typeof $fetch>[1] = {}) => {
const config = useRuntimeConfig()
const tokenCookie = useCookie('auth_token')
const nuxtApp = useNuxtApp()
const tokenCookie = useCookie('auth_token', { path: '/' })
const tokenState = useState<string | null>('auth_token_state')
const tokenValue = tokenState.value ?? tokenCookie.value
@@ -38,7 +39,7 @@ export const useApiFetch = <T>(request: string, options: Parameters<typeof $fetc
}
try {
navigateTo('/auth/login')
nuxtApp.runWithContext(() => navigateTo('/auth/login'))
} catch (e) {
console.error('[API] Error navigating to login:', e)
}
+11 -8
View File
@@ -8,9 +8,13 @@ import type {
} from "~/types/api";
export const useAuth = () => {
const token = useCookie('auth_token', {
const route = useRoute()
const nuxtApp = useNuxtApp()
const token = useCookie<string | null>('auth_token', {
maxAge: 60 * 60 * 12,
sameSite: 'lax',
path: '/',
watch: true
})
@@ -25,7 +29,7 @@ export const useAuth = () => {
tokenState.value = newVal || null
})
const syncUser = async () => {
const syncUser = async (redirectOnSuccess = false) => {
const tokenVal = tokenState.value || token.value
if (!tokenVal || isSyncingUser.value) return
@@ -36,12 +40,11 @@ export const useAuth = () => {
console.log('[Auth] User synced successfully')
user.value = res.user
const route = useRoute()
if (res.user.must_change_password && route.path !== '/auth/change-password') {
console.log('[Auth] User must change password, redirecting...')
await navigateTo('/auth/change-password')
} else {
await navigateTo('/dashboard')
await nuxtApp.runWithContext(() => navigateTo('/auth/change-password'))
} else if (redirectOnSuccess && route.path.startsWith('/auth')) {
await nuxtApp.runWithContext(() => navigateTo('/me'))
}
}
} catch (error) {
@@ -55,14 +58,14 @@ export const useAuth = () => {
const handleLoginSuccess = async (jwtToken: string) => {
token.value = jwtToken
tokenState.value = jwtToken
await syncUser()
await syncUser(true)
}
const logout = () => {
token.value = null
tokenState.value = null
user.value = null
navigateTo('/auth/login')
nuxtApp.runWithContext(() => navigateTo('/auth/login'))
}
const register = (body: RegisterCitizenRequest) =>
+1 -3
View File
@@ -1,7 +1,6 @@
export default defineNuxtRouteMiddleware(async () => {
const auth = useAuth()
// Se c'è un token ma l'utente non è ancora caricato e non stiamo già sincronizzando, sincronizza
if ((auth.token.value || auth.tokenState.value) && !auth.user.value && !auth.isSyncingUser.value) {
try {
await auth.syncUser()
@@ -10,8 +9,7 @@ export default defineNuxtRouteMiddleware(async () => {
}
}
// Se autenticato, redirige al dashboard
if (auth.isAuthenticated.value && auth.user.value) {
return navigateTo('/dashboard')
return navigateTo('/me')
}
})
+1 -1
View File
@@ -45,7 +45,7 @@ const handleSubmit = async () => {
if (res.ok) {
await syncUser()
await router.push('/dashboard')
await router.push('/me')
}
} catch (error: any) {
errorMessage.value = error.data?.message || 'Errore. Verifica la password attuale.'
-1
View File
@@ -41,7 +41,6 @@ const handleVerifyOtp = async () => {
try {
const res = await verifyOtp({ email: email.value, code: otpCode.value })
await handleLoginSuccess(res.token)
router.push('/dashboard')
} catch (err: any) {
errorMessage.value = 'Codice OTP non valido o scaduto.'
} finally {