diff --git a/app/middleware/auth.global.js b/app/middleware/auth.global.js new file mode 100644 index 0000000..36fd473 --- /dev/null +++ b/app/middleware/auth.global.js @@ -0,0 +1,29 @@ +// file: ~/middleware/authentication.global.ts +export default defineNuxtRouteMiddleware(async (to) => { + const { status, refresh } = useAuth(); + + const deleteCookies = () => { + const atoken = useCookie("authls.atoken"); + atoken.value = null; + const rtoken = useCookie("authls.rtoken"); + rtoken.value = null; + }; + + // Return immediately if user is already authenticated and protected page + if (status.value === "authenticated" && to.meta.auth === true) { + console.log("case 1"); + return; + } + if (status.value !== "authenticated" && to.meta.auth === true) { + try { + console.log("case 2"); + await refresh(); + } catch { + console.log("case 3"); + deleteCookies(); + } + return; + } + deleteCookies(); + return; +}); diff --git a/app/pages/index.vue b/app/pages/index.vue index c58e639..4f921cc 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -10,11 +10,12 @@
My Application's Home Page
{{ norrisStore.response }} -
-
{{ data }} {{ status }}
+
+ Refresca token +
@@ -25,10 +26,9 @@ definePageMeta({ import { ref, onMounted } from "vue"; import { useChuckNorris } from "~/stores/chuck"; const norrisStore = useChuckNorris(); -const { data, status } = useAuth(); +const { data, status, refresh } = useAuth(); onMounted(async () => { await norrisStore.getData(); - console.log(norrisStore.response); }); diff --git a/nuxt.config.ts b/nuxt.config.ts index c4c68e3..76dbe5f 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -16,19 +16,20 @@ export default defineNuxtConfig({ signInResponseTokenPointer: "/access", type: "JWT", headerName: "Authorization", - maxAgeInSeconds: 60 * 30, cookieName: "authls.atoken", + maxAgeInSeconds: 30 * 60, }, refresh: { isEnabled: true, - endpoint: { path: "/refresh", method: "post" }, - refreshOnlyToken: true, + endpoint: { path: "/jwt/refresh/", method: "post" }, + refreshOnlyToken: false, token: { signInResponseRefreshTokenPointer: "/refresh", - refreshResponseTokenPointer: "", + refreshResponseTokenPointer: "/access", refreshRequestTokenPointer: "/refresh", - maxAgeInSeconds: 60 * 60 * 24, cookieName: "authls.rtoken", + maxAgeInSeconds: 60 * 60 * 24, + sameSiteAttribute: "strict", }, }, endpoints: {