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 |