HTTP Header에 Authorization 속성으로 token
을 실어서 api 권한을 인증하는 방식
token
기반의 인증시스템에서 주로 사용하는 server단 librarytoken
Vuex store
를 이용해 token
을 관리const instance = axios.create({
headers: {
Authorization: store.state.token,
/*
axios 인스턴스를 만들게되면 처음 설정했던 값이 변하지 않는다.
store.state.token의 초기값은 빈값이므로 토큰이 없는거나 마찬가지
기본적인 해결책은 interceptor api를 사용하는 것
*/
}
});
// Add a request interceptor
axios.interceptors.request.use(function (config) {
// 요청을 보내기 전 처리 로직
return config;
}, function (error) {
// 에러가 컴포넌트 단에 오기 전 처리 로직
return Promise.reject(error);
});
// Add a response interceptor
axios.interceptors.response.use(function (response) {
// 서버에 응답을 받기 전 처리 로직
return response;
}, function (error) {
// 서버에 응답이 에러인경우 컴포넌트 단에 오기 전 처리 로직
return Promise.reject(error);
});
// interceptors.js
export function setInterceptors(instance) {
instance.interceptors.request.use(function (config) {
config.headers.Authorization = store.state.token;
...logic
}
instance.interceptors.response.use(function (response) {
...logic
}
}
// api/index.js
function createInstance() {
const instance = axios.create({
baseURL: url,
});
return setInterceptors(instance);
}
const instance = createInstance();
// cookie.js
function saveAuthToCookie(value) {
document.cookie = `auth=${value}`; // 쿠키 저장
}
function getAuthFromCookie() {
return document.cookie.replace(
/(?:(?:^|.*;\s*)auth\s*=\s*([^;]*).*$)|^.*$/,
'$1', // 쿠키값 가져오기
);
}
function deleteCookie(value) {
document.cookie = `${value}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`; // 쿠키 삭제
};
// store.js
state: {
token: getAuthFromCookie() || '',
},