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

헤더에 인증 정보 추가하는 방법들어가며방법① 파일에 인증 헤더 부분 추가하기② utils 폴더에 인증 정보가 담긴 파일 생성 후, 필요한 곳에서 import 하여 추가하기③ Axios 인터셉터(Interceptor) 사용하기