前提
- nuxt.js(2.15.8)
- SPAのアプリ
- ログインページ以外は全ページに認証かけていた
やりたかったこと
- アプリではAPIサーバとのやりとりにaxiosを使っている
- APIサーバから503が返ってきたら、メンテナンスページを表示したかった
if (code === 503) {
redirect('maintenance') // こんな感じのことをしたい
}
やったこと
- maintenance.vueを作成
- axiosのpluginで応答エラー503が返ってきたらメンテナンスページにリダイレクト(上記コードのイメージ)
- デバッグ用にapi側は全レスポンスを503返すように設定
動かしてみた結果
chrome console
Redirected when going from "/login" to "/maintenance" via a navigation guard.
原因と解決方法
- 原因
- 単純な話で、メンテナンスページにも認証をかけてしまっていて、ログイン済みじゃないと表示できないようになっていた
- なので、とあるページでAPIアクセス→メンテナンスページ→ログインページ→(APIアクセス)→メンテナンスページ... みたいな感じで無限ダイレクトみたいになってたっぽい
- 解決
- メンテナンスページで
auth: falseを設定してやる
- メンテナンスページで
<script lang="ts">
export default defineComponent({
auth: false, // <-- これ
setup() {},
})
</script>
感想
- 最初はnuxtの不具合みたいのかと思ったけど普通に設定ミスでした。。