使用環境
vue: ^2.5.7
vuex: ^3.0.1
vuex-persistedstate: ^2.5.4
データの永続化について
JavaScriptでログイン情報を保持するには基本的にはローカルに保存する仕組みを作る必要があります。
ローカルに保存する仕組みとしてはクッキーが有名ですが、最近ではWebStorageを利用するのが一般的なようです。
WebStorageの中でもlocalStorageとsessionStorageがありますが、localStorageはブラウザを閉じてもデータを保持するのに対して、sessionStorageはブラウザを閉じるとデータは破棄されます。
今回はブラウザのリロード時だけデータを保持したいのでsessionStorageを使用します。
vuex-persistedstate のインストール
vuex-persistedstate を使用すると簡単な設定だけでVuexのステート情報を保存することができます。
まずはNPMでインストールしましょう。
$ npm install vuex-persistedstateストアの設定
モジュール化されたauthストアがあるとします。
今回はこのstateのtokenをsessionStorageに保存します。
const state = { token: ''};
const mutations = { login (state, payload) { state.token = payload; }, logout (state) { state.token = null; }};
export default { namespaced: true, state, mutations};vuex-persistedstateの設定はVuex.Storeのpluginsに設定します。
import Vue from 'vue';import Vuex from 'vuex';import createPersistedState from "vuex-persistedstate";import auth from "./modules/auth";
Vue.use(Vuex);
export default new Vuex.Store({ modules: { auth }, strict: true, plugins: [createPersistedState({ key: 'TodoApp', paths: ['auth.token'], storage: window.sessionStorage })]});| key | sessionStorageのキーとなりますので、他のアプリと被らないユニークな文字列にします。 |
|---|---|
| paths | 保存するstateを指定します。 今回はauthモジュールのtokenなので auth.tokenですね。 |
| storage | ストレージの種類や動作を指定します。 |
以上で設定は完了です。
これで、auth.tokenが変更される度に自動的にsessionStorageも書き換えてくれます。
リロード時にsessionStorageを読み込む
最後にアプリ起動時にsessionStorageを読み込み、tokenをaxiosに設定する処理をします。
Laravelの環境だとグローバルでaxiosが使用できるので下記のようになります。
if (sessionStorage.getItem('TodoApp')) { const strageData = JSON.parse(sessionStorage.getItem('TodoApp')); if (strageData.auth.token) { axios.defaults.headers.common['Authorization'] = 'Bearer ' + strageData.auth.token; }}以上です。
vuex-persistedstateを使えば簡単にVuexのストアの永続化ができますね。
ここまでのソースコードはGithubに載せてあります。
LaravelTodoSPA



