์ด๋ฒ ๊ธ์ 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