2020-01-13
【Vue Router】ブラウザバック(戻るボタン)で beforeEach() がうまく動作しない
やりたいこと
Vue Routerを利用した認証機能付きSPAで、ログイン状態でログインフォーム(/login)にアクセスした際、ホーム画面(/home)に強制遷移させたい。
基本方針
Vue Router の beforeEach() を利用して以下のように記述。(認証状態はVuexに持たせています)
router.js
router.beforeEach((to, from, next) => {
if (!to.meta.requireAuth && store.state.auth.isAuth) {
next('/home');
}
next();
}
発生した問題
Vue Router を利用したリダイレクト this.$router.push('/login') や、ページリロードした場合には上記 beforeEach() が機能するが、ブラウザの戻るボタンを押したときにはそのままログインフォームに戻ってしまう。
解決法
mounted() で対処する
Login.vue
mounted() {
if (this.$store.state.auth.isAuth) {
this.$router.push('/home');
}
}
ブラウザバックによるページ遷移制御をVue Routerで行うのは限度があるので、Vueコンポーネント側で対処する。
せっかくVue Routerがあるのに…という感じだが仕方ない。ブラウザバックは厄介なので…
参考
https://laracasts.com/discuss/channels/vue/vue-2-how-to-redirect-route-on-hitting-browser-back