10
9

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 3 years have passed since last update.

Next.jsでトークン設定済みのAxiosを使えるようにしてみた

Posted at

経緯

  • Axiosに認証トークンを設定する処理を共通化したい
  • 何ならAxiosを使用する際にトークン設定済みの状態にしたい

方法

  • Axiosのインスタンスを生成→ヘッダーの設定→そのインスタンスの返却、を行うラッパー?ソースファイルを用意する。

  • 各ソースファイルでAxiosを使用したいときは、そのラッパーファイルから呼ぶようにする。

実装

  • ラッパーファイル(例:customAxios.ts)
import axios from 'axios'; // Axios本体をインポート

const instance = axios.create(); // Axiosインスタンスを生成

instance.interceptors.request.use(
  (config) => {
    // 認証トークンをヘッダーに付与
    config.headers.common['Authorization'] = 'Bearer ' + process.env.TOKEN; // この例ではBearerトークンを設定
    return config;
  }
);

export default instance; // デフォルトエクスポート!!

  • 使用例
import axios from '@/.../customAxios'

// ヘッダーがセットされた状態で送信される!!
axios.get('<path>')
.then(res => {...});

備考

以下のような引数も取れるのでエラー時の処理も共通化できそう。(試してはいない)

import axios from 'axios';

const instance = axios.create();

instance.interceptors.request.use(
  (config) => {
    config.headers.common['Authorization'] = 'Bearer ' + process.env.TOKEN;
    return config;
  },
  (error) => {
    // エラー時の処理
    return Promise.reject(error);
  }
);

export default instance;

後書き

NuxtだとAxiosが最初からモジュール化されているから良い感じにやる方法あるみたいだけど、
Nextだとこれくらいしかスマートな方法がないような。

Nextに限らず色々応用はできそう。

他に良い案があればご意見いただければと。

10
9
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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?