SpringBoot/오류 해결
[JWT] vue.js에서 응답헤더의 Authorization 받는 법(undefined 문제)
공부 기록장
2025. 1. 8. 17:36
1. 문제
서버에서 HTTP 응답헤더에 accessToken을 넣어서 반환하면
클라이언트에서는 accessToken을 받아서 로컬 변수에 저장하여 인증받는 방식을 사용하려는데
아래의 코드를 적용해도 undefined 가 뜨는 경우가 생겼다.
async login({ commit }, {id, password}) {
try {
const response = await axios.post("http://localhost:8081/api/login", {
userId: id,
userPw: password,
});
const accessToken = response.headers.get("Authorization");
if(accessToken){
const token = accessToken.split(' ')[1];
console.log(token);
}
commit('SET_LOGIN_STATE', true);
} catch (error) {
console.error("로그인 실패:", error);
alert("로그인 정보 불일치");
}
},
2. 해결 방법
이는 서버 CORS 설정 클래스에서 다음 코드를 추가하면 해결된다.
.exposedHeaders(HttpHeaders.LOCATION, "Authorization");
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry){
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080") // 클라이언트 주소
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowCredentials(true) //클라이언트가 쿠키 또는 인증정보를 요청에 포함할 수 있음
.exposedHeaders(HttpHeaders.LOCATION, "Authorization"); //클라이언트가 응답헤더를 접근할 수 있도록 함
}
}
3. 해결 결과
undefined 로 뜨던 문제가 다음과 같이 accessToken이 추출된다.