๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Couch Coding

Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - ๊ธ€๋กœ๋ฒŒ axios ๊ธฐ๋ณธ(defaults) ์„ค์ •

์ด๋ฒˆ ๊ธ€์€ axios๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž 

 

axios์˜ default๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด axiosInstance๋ผ๋Š” ํŒŒ์ผ๋‚ด์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜์ž 

 

 

์šฐ๋ฆฌ ํŒ€์€ ์œ„ ์ฒ˜๋Ÿผ commonํด๋”์—์„œ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. 

 

์ด์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž 

 

// axiosInstance.js

import axios from 'axios';

const axiosInstance = axios.create({ baseURL: 'https://api.example.com' });

axiosInstance.defaults.headers.common['Authorization'] = 'FIREBASE AUTH TOKEN';

export default axiosInstance;

 

์œ„ ์ฝ”๋“œ๋Š” ๋ฉ˜ํ† ๋‹˜์ด ์ฒ˜์Œ ์ฃผ์‹  ์˜ˆ์‹œ ์ฝ”๋“œ์ด๋‹ค. 

 

axios.create()์ด ํ•ต์‹ฌ์ด๋‹ค !  
์œ„์™€ ๊ฐ™์ด axios์˜ create() ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ํ†ต์‹ ํ•  ๋•Œ ํ•„์š”ํ•œ baseURL, ์ฟผ๋ฆฌ, ํ—ค๋”, ๋ฐ”๋”” ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ์œ„ ์ฝ”๋“œ์™€ ์งœ์ž„์„ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผํ–ˆ๋‹ค. 

 

// AuthProvider.jsx

useEffect(() => {
    auth.onAuthStateChanged(async (firebaseUser) => {
      if (firebaseUser) {
        try {
          const token = await firebaseUser.getIdToken();
          defaultHeaders.Authorization = `Bearer ${token}`;

          const res = await axios({
            method: 'GET',
            url: '/members/me',
            withCredentials: true,
            headers: defaultHeaders,
          });

          if (res.status === 200) {
            const user = res;
            setUser(user);
          }
        } catch (e) {
          console.log('๋กœ๊ทธ์ธ ๋œ ํšŒ์› ์—†์Œ ');
          setRegisterFormOpen(true);
        }
      } else {
        setUser(null);
      }
    });
  }, []);

 

์œ„ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ๋กœ๊ทธ์ธ์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค 

useEffect ์•ˆ์—์„œ firebaseUser ( ํšŒ์› )์ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ์ฆ์ด ๋˜์—ˆ๋‹ค๋ฉด ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์ธ์ฆ์„ ์š”์ฒญํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค   

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ํšŒ์›์˜ ์ธ์ฆ์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” auth.onAuthStateChanged(async (firebaseUser) => {   ์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€

์žˆ์–ด์•ผํ•œ๋‹ค . 

 

์ด ์ฒ˜๋Ÿผ ์ธ์ฆํ•  ๋•Œ ๋งˆ๋‹ค ํšŒ์›์ด ์ธ์ฆ๋˜์—ˆ๋Š”์ง€ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 

axiosInstance์—์„œ ์ธ์ฆ์„ ํ•œ๋ฒˆ ํ•˜๊ณ ๋‚˜๋ฉด ํšŒ์›์˜ ํ† ํฐ์ด default๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ๋‹ค. 

 

//axiosInstance 

const axiosInstance = axios.create({
  headers: {
    Authorization: '',
  },
});

axiosInstance.interceptors.request.use(
  (config) => {
    config.headers['Authorization'] = localStorage.getItem('token');
    return config;
  },
  (err) => {
    return Promise.reject(err);
  },
);

 

axiosInstance๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์š”์ฒญ์„ ์ธํ„ฐ์…‰ํŠธํ•˜์—ฌ token์„ header์— ๋„ฃ์–ด์ฃผ๊ณ  ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” token์„ ์ƒ์„ฑํ•˜๊ณ  

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ๋ณด๊ด€ํ•ด ๋†“์•˜๋‹ค๊ฐ€ axios ์š”์ฒญ์„ ํ•˜๊ธฐ ์ „์— intercept ํ•˜์—ฌ ํ† ํฐ์„ ํ—ค๋”์— ๋‹ด์•„ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. 

 

์œ„์ฒ˜๋Ÿผ create๋กœ ๋ณ€๊ฒฝํ•œ ์ดํ›„์—๋Š” axios๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ๋งˆ๋‹ค ํ—ค๋”๋ฅผ ์„ค์ •ํ•ด ์ค„ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค 

๋ชจ๋“ˆํ™”์˜ ์ค‘์š”์„ฑ์„ ํ•œ๋ฒˆ ๋” ๋А๋ผ๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค !

 

reference 

https://yamoo9.github.io/axios/guide/config-defaults.html

 

Config ๊ธฐ๋ณธ ์„ค์ • | Axios ๋Ÿฌ๋‹ ๊ฐ€์ด๋“œ

Config ๊ธฐ๋ณธ ์„ค์ • ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹์ ์šฉ๋  ๊ตฌ์„ฑ ๊ธฐ๋ณธ(Config Defaults) ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ axios ๊ธฐ๋ณธ(defaults) ์„ค์ • axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common['Authorization

yamoo9.github.io

 

https://yamoo9.github.io/axios/guide/interceptors.html

 

์ธํ„ฐ์…‰ํ„ฐ | Axios ๋Ÿฌ๋‹ ๊ฐ€์ด๋“œ

์ธํ„ฐ์…‰ํ„ฐ then์ด๋‚˜catch๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. axios.interceptors.request.use( function (config) { return config; }, function (error) { return Promise.reject(error); }); axios.interceptors.response.us

yamoo9.github.io