Nuxt.jsでmiddlewareを使ってログインしていないユーザーをリダイレクトする方法

Vue.js

Nuxt.jsでmiddlewareを使ってログインしていないユーザーをリダイレクトする方法を紹介します。

middlewareを使ってログインしていないユーザーをリダイレクトする手順

  1. ログイン機能を作る
  2. store/index.jsの認証状態を確認するgettersを定義する
  3. middlewareフォルダにauth.jsを作成する
  4. pagesにmiddleware/auth.jsをセットする

ログイン機能を作る

Nuxt.jsでFirebase REST APIを使ったサインアップ・ログイン機能の作り方を参考にしてみてください。

store/index.jsの認証状態を確認するgettersを定義する

    state: {
      token: null, //ユーザー認証
    },

stateにtokenを保持しており、そこにFirebaseの認証のためのIDトークンが格納されるとします。

その状態であれば、gettersは次のように記述します。

    getters: {
      // 認証の確認
      isAuthenticated(state) {
        // tokenがnullでないなら認証されているということ
        return state.token != null
      }
    }

tokenがnullでなければtrue、nullならfalseが返されます。
nullでないならIDトークンがあるということなので、認証されていることがわかります。

middlewareフォルダにauth.jsを作成する

export default function (context) {
  // 認証されていないユーザーの場合、リダイレクト
  if (!context.store.getters.isAuthenticated) {
    context.redirect('/admin/signup')
  }
}

gettersには、contextのstoreからアクセスできます。
認証されていないユーザーの場合、ログインページなどリダイレクトしたいページに飛ばします。

pagesにmiddleware/auth.jsをセットする

pagesで認証されている状態が必要なvueファイルのscriptに以下を記述します。

  middleware: 'auth',

これで認証されて

Vue.js

Posted by devsakaso