axios Interceptors를 사용하여 공통 처리를 만듭니다.

소개



이 게시물은 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 설정



    plugins에 추가합니다.



    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) // エラー時はエラー内容をそのままトースト表示
      })
    }
    

    동작 확인



    토스트 확인





    인증 전에 인증이 필요한 요청을 제출하면 401 오류가 반환됩니다.
    그 내용이 토스트로 표시되고 있네요.

    Authorization 헤더 확인





    인증 후 인증이 필요한 엔드포인트(/api/v1/private)에 요청을 전송하고 있습니다.
    200이 반환되고 Authorization 헤더가 부여되었음을 알 수 있습니다.

    예상대로의 거동이 되었습니다! 성공입니다!

    참고

  • 좋은 웹페이지 즐겨찾기