環境 OS:linux(ubuntu studio) npm:6.2.0 node:10.8.0 vue-cli:2.9.6 UIフレームワーク:onsen ui
ログインした後、マイページ情報を表示するのがゴールという仮定で話を進めます。
これを実現するために、ログイン後トークンを格納した状態でマイページ情報を呼び出す必要があります。
目的として、いちいちaxiosのheader情報を書くのは大変であるため、mainで一括管理をできるようにすることをゴールとしています。
現在自分の行った実装は以下のようになります。
js
1export default new Vuex.Store({ 2 modules: { 3 login: { 4 state: { 5 loginFlg: false, 6 access_token: localStorage.LgbtProjectToken 7 }, 8 mutations: { 9 logout (state) { 10 state.access_token = '' 11 state.loginFlg = false 12 }, 13 login (state, token) { 14 state.access_token = token 15 state.loginFlg = true 16 } 17 } 18 } 19 } 20})
js
1// main.js 2 3const axiosBase = axios.create({ 4 baseURL: process.env.BASE_URL, 5 headers: { 6 Authorization: 'Bearer ' + store.state.login.access_token 7 } 8}) 9/* eslint-disable no-new */ 10// `myOption` カスタムオプションにハンドラを注入する 11Vue.mixin({ 12 data: function () { 13 return { 14 axios: axiosBase, 15 headers: { 16 headers: { 17 Authorization: 'Bearer ' + store.state.login.access_token 18 } 19 }, 20 token: store.state.login.access_token 21 } 22 }, 23 watch: { 24 token: function (val) { 25 console.log(val) 26 } 27 } 28}) 29 30Vue.mixin({ 31 data: function () { 32 return { 33 axios: axiosBase, 34 headers: { 35 headers: { 36 Authorization: 'Bearer ' + store.state.login.access_token 37 } 38 }, 39 token: store.state.login.access_token 40 } 41 } 42})
js
1// Profile.js 2this.axios 3.get(process.env.BASE_URL + 'getProfile', this.headers) 4.then(function(res) { ... }
試行錯誤した結果、とりあえずmixinでどのコンポーネントからも参照できるようにすることで、少しでもコンポーネント内のheaderの記述を減らそうという作戦です。
ただ、現状ですと、headersがネストしている状態になっているため、あまりいいアプローチとは言えません。
もっと見やすく、かつわかりやすいコードを記述するためのアプローチがありましたらぜひご教授のほどよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。