概要
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 } });
}
}
});