728x90
728x90
헤더에 인증 정보 추가하는 방법
들어가며
- Axios를 사용하여 헤더에 인증(Authorization) 정보를 추가하는 방법을 정리해본다.
- 이 글은 리액트(React) 코드로 작성되었다.

방법
① 파일에 인증 헤더 부분 추가하기
- API 호출을 하고자 하는 파일 안에 인증 정보를 담은 변수를 생성하여 추가하는 방법이다.
// 인증 정보를 담은 변수 const authHeader = (thunkAPI) => { return { headers: { authorization: `Bearer ${thunkAPI.getState().user.user.token}`, }, }; }; export const createJobThunk = async (job, thunkAPI) => { try { const resp = await customFetch.post('/jobs', job, authHeader(thunkAPI)); // 인증 정보 추가 thunkAPI.dispatch(clearValues()); return resp.data; } catch (error) { return thunkAPI.rejectWithValue(error.response.data.msg); } };
② utils 폴더에 인증 정보가 담긴 파일 생성 후, 필요한 곳에서 import 하여 추가하기
utils
폴더 안에authHeader.js
파일을 생성한 후, API 호출을 하는 파일에서 import 하여 인증 정보를 헤더에 추가하는 방법이다.
/src/utils/authHeader.js
// 헤더에 넣을 인증 정보 const authHeader = (thunkAPI) => { return { headers: { authorization: `Bearer ${thunkAPI.getState().user.user.token}`, }, }; }; export default authHeader;
/src/features/jobThunk.jsx
import authHeader from '../../utils/authHeader'; // 인증 정보 가져오기 export const createJobThunk = async (job, thunkAPI) => { try { const resp = await customFetch.post('/jobs', job, authHeader(thunkAPI)); // 인증 정보 추가 thunkAPI.dispatch(clearValues()); return resp.data; } catch (error) { return thunkAPI.rejectWithValue(error.response.data.msg); } };
③ Axios 인터셉터(Interceptor) 사용하기
- Axios를 사용하여 API 요청 시, 공통적으로 사용하는 Axios 인스턴스를 정의한 파일(
utils/axios.js
) 안에request
인터셉터(Interceptor)를 이용하여 헤더에 인증 정보를 추가하는 방법이다.
/src/utils/axios.js
import axios from 'axios'; import { getUserFromLocalStorage } from './localStorage'; const customFetch = axios.create({ baseURL: 'https://example.api', }); // Axios 요청이 실행되기 전에 실행되는 작업 추가 // -> request 인터셉터는 요청이 서버로 전송되기 전에 호출된다. customFetch.interceptors.request.use( (config) => { // 로컬 스토리지에서 사용자 정보 가져오기 const user = getUserFromLocalStorage(); // 사용자 정보가 있을 경우 if (user) { // 인증 정보 추가하기 config.headers['Authorization'] = `Bearer ${user.token}`; // 최신 버전에서 'common'을 추가할 경우, undefined가 반환된다. // config.headers.common['Authorization'] = `Bearer ${user.token}`; } return config; }, (error) => { return Promise.reject(error); } ); export default customFetch;
/src/utils/localStorage.js
// 로컬 스토리지에서 사용자 정보 가져오기 export const getUserFromLocalStorage = () => { const result = localStorage.getItem('user'); const user = result ? JSON.parse(result) : null; return user; };
/src/features/jobThunk.jsx
- 이제 헤더에 인증 정보를 따로 추가해주지 않아도 된다.
export const createJobThunk = async (job, thunkAPI) => { try { const resp = await customFetch.post('/jobs', job); // 인증 정보를 따로 추가하지 않아도 된다. thunkAPI.dispatch(clearValues()); return resp.data; } catch (error) { return thunkAPI.rejectWithValue(error.response.data.msg); } };
728x90
728x90
'Programming > Axios' 카테고리의 다른 글
[Axios] HTTP 메서드 (1) | 2024.09.21 |
---|---|
[Axios] 전역(Global)/커스텀(Custom) 인스턴스, 인터셉터(Interceptor) (0) | 2024.09.20 |
[Axios] Axios 라이브러리 (0) | 2023.11.15 |