1. jwt 토큰을 발급받고 나면 사용자가 요청을 보낼때마다 header에 발급받았던 accessToken을 보내주어야 한다. 2. accessToken은 유효기간이 짧기때문에 통신이 일어났을때 accessToken이 만료되면 refreshToken을 이용해 빨 리 재발급을 받아 사용자의 요청이 이루어질 수 있도록 해주어야 한다. 3. refreshToken이 만료되는 경우에는 다시 로그인 할 수있도록 해야한다.
결국 통신이 일어날때마다 인가인증이 필요하기 때문에 axiosInstance의 필요성을 느꼈다.
✅baseURL - 요청을 보낼때 기본 주소 값을 넣어주면 된다. ✅headers - 데이터 형식 명시 1. 클라이언트가 보내는 요청 본문의 타입을 서버에 알려주는 역할 ✅responseType - 서버로부터 받응 응답 데이터 타입 지정 1. 서버로부터 받응 응답을 해당 responseType에 맞게 자동으로 변환
- 토큰이 있는경우 config.headers["Authorization"] = `Bearer ${token}` 다음과 같이 작성하고 config를 return해주면 된다.
✅ interceptors 요청이 서버로 전송되기 전이나 응답을 받은 후에 특정 코드를 실행할 수있게 해주는 기능. 즉, 모든 요청이나 응답을 중간에 가로채어 추가 로직을 실행할 수있게 해준다.
앞서 필요한 이유를 설명했던 것을 보면 요청이나 응답을 받을 때 인가인증을 위해서 해주어야 하는 것들이 있다. ●요청 시 header에 accessToken 담아서 보내주기 ●요청 시 accessToken이 만료되었다면 refreshToken을 이용해 재발급 후 재요청 ● refreshToken을 이용해 accessToken을 재발급 요청하였으나 refreshToken이 만료시 재로그인
위 내용은 모든 요청이나 응답을 중간에 가로채어 로직을 실행해주면 사용자는 알수 없겠지요..!!
✅ axiosInstance.interceptors.request.use 아 메소드는 요청을 보내기 전에 실행되는 코드를 설정하는데, 두 개의 함수를 인자로 받는다.
● 첫 번째 인자: 요청이 성공적으로 처리될 때 실행 ● 두 번째 인자: 요청이 실패할 때 실행
✅ config config 객체는 Axios 요청 구성 설정을 담고있다. 이 객체를 수정해서 요청의 헤더, URL, timeout 등을 조정할 수 있다.
✅ const token = sessionStorage.getItem("token"); 나의 경우 세션스토리지에 토큰값을 넣어두었기 때문에 다음과 같이 토큰을 꺼내어 사용
✅if(token) { config.headers["Authorization"] = `Bearer ${token}`; } ● 헤더에 Authorization 필드로 설정 ● Bearer 는 토큰이 OAuth 2.0 type 이라는 것을 나타내는데 이는 백엔드에서 요청하는 이름으로 사실 백앤드가 아래 이름처럼 요청해서.. 헤더 인증에 쓰이는 규약같은 key 값이라서 큰 변동은 없을 것이다..!!
✅ return config; 수정된 config 객체를 반환해서 Axios 요청이 이설정을 사용하도록 할 수 있다. 즉 모든 요청에 인증토큰이 포함되어 서버로 전송된다.
✅ Promise.reject(error) Promise.reject는 프로미스(promise)가 실패하였음을 감지해 오류 처리
⬇️ 요청중 401에러가 감지되었을 때 코드 실행 흐름 단계 (전체적인 내용을 쉽게 이해할 수 있음)