31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

axios Interceptorsを使用して共通処理を作る。

Last updated at Posted at 2018-07-12

はじめに

この投稿はNuxt.js + Auth0 + Spring Boot で作る認証付きSPAのおまけです。
リポジトリは以下
フロント
サーバサイド

概要

axiosを使用して非同期通信を行う際
リクエスト時やエラー時などで共通処理を挟み込みたいことがあると思います。
今回は

  • リクエスト時にAuthorizationヘッダーを付与すること
  • エラー発生時にエラーの内容をトーストで表示すること

この二点をaxios Interceptorsを使用して実現したいと思います。

エラー表示に使用するToastを設定する

先ずはトーストの準備をしましょう。 yarnでdependenciesに追加します。

yarn add @nuxtjs/toast

nuxt.config.js に設定を追加します。

nuxt.config.js
 modules: [
    '@nuxtjs/axios',
    '@nuxtjs/proxy',
    '@nuxtjs/toast'   //追加
  ],
  toast: {
    position: 'top-center',  //トーストの表示位置
    duration: 2000           //トーストの表示されている時間(今回は2秒に設定)
  }

axios Interceptorsの設定

puluginsに追記します。

nuxt.config.js
   plugins: [
    '~/plugins/auth0.js',
    '~/plugins/axios.js'  //追加
  ],

plugins/axios.jsを作成します。

axios.js

import Vue from 'vue'

export default function ({$axios}) {
  $axios.onRequest(config => {
    console.log('Making request to ' + config.url)
    config.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('idToken'); // リクエスト時にAuthorization ヘッダを設定、設定値はlocalStorageのidTokenの値を使用する。
  })

  $axios.onError(error => {
    Vue.toasted.error(error) // エラー時はエラー内容をそのままトースト表示
  })
}

動作確認

トーストの確認

エラー時.mov.gif

認証前に認証が必要なリクエストを送信すると401エラーが返ってきています。
その内容がトーストで表示されていますね。

Authorizationヘッダの確認

image.png

認証後に認証が必要なエンドポイント(/api/v1/private)にリクエストを送信しています。
200が返ってきていてAuthorizationヘッダが付与されていることがわかります。

想定通りの挙動になりました!成功です!

参考

31
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?