diff --git a/.changeset/funny-peaches-float.md b/.changeset/funny-peaches-float.md new file mode 100644 index 00000000000..b70c1189cc7 --- /dev/null +++ b/.changeset/funny-peaches-float.md @@ -0,0 +1,5 @@ +--- +"@clerk/nuxt": patch +--- + +Fixed an issue where Nuxt route middleware saw intermediate states during navigation, causing unwanted redirects during sign-in/sign-out flows. diff --git a/packages/nuxt/src/runtime/plugin.ts b/packages/nuxt/src/runtime/plugin.ts index 7e125ce4e78..6537829f275 100644 --- a/packages/nuxt/src/runtime/plugin.ts +++ b/packages/nuxt/src/runtime/plugin.ts @@ -4,6 +4,9 @@ import { clerkPlugin } from '@clerk/vue'; import { setErrorThrowerOptions } from '@clerk/vue/internal'; import { defineNuxtPlugin, navigateTo, useRuntimeConfig, useState } from 'nuxt/app'; +// @ts-expect-error: Handled by Nuxt. +import { nextTick } from '#imports'; + setErrorThrowerOptions({ packageName: PACKAGE_NAME }); setClerkJsLoadingErrorPackageName(PACKAGE_NAME); @@ -25,8 +28,16 @@ export default defineNuxtPlugin(nuxtApp => { version: PACKAGE_VERSION, environment: process.env.NODE_ENV, }, - routerPush: (to: string) => navigateTo(to), - routerReplace: (to: string) => navigateTo(to, { replace: true }), + routerPush: (to: string) => { + return nextTick(() => { + void navigateTo(to); + }); + }, + routerReplace: (to: string) => { + return nextTick(() => { + void navigateTo(to, { replace: true }); + }); + }, initialState: initialState.value, }); });