概要
Nuxt 3.11.2
にて、global middleware
でnavigateTo
を使うとERR_TOO_MANY_REDIRECTS
エラーが発生する
※ローカルでnpm run dev
すると発生しない
AWS LambdaにデプロイしてCloudFrontにアクセスすると発生した
Nuxt 3.0.0-27444434.856c01a
の頃はVue Router
で無限ループが発生していたらしい
(まだこの事象が残っているのか、これが原因でエラーとなっているのかは不明)
回避策
上記記事では「local middleware
なら問題ない」と書いてあるが、ログイン状態によるリダイレクトなどは基本的に全ページで処理したく、全ページにmiddleware
の定義を書くのは面倒
→代わりにrouter.push
を使うと解決した
(他になにか問題が出ているかも、何かあれば追記予定)
/middleware/auth.global.ts
export default defineNuxtRouteMiddleware(async (to, _from) => {
// なんか時間のかかるログイン状態チェック処理
const isLoggedIn = await checkIsLoggedIn();
if (isLoggedIn) {
if (to.path === "/login") {
- return navigateTo("/");
+ useRouter().push("/");
}
} else {
if (to.path !== "/login") {
- return navigateTo({ path: "/login", query: { redirect: to.path } });
+ useRouter().push({ path: "/login", query: { redirect: to.path } });
}
}
});