[React] Login 컴포넌트
const submitHandler = (e) => {
e.preventDefault();
const fetchData = async () => {
const data = await postUserLogin(user); // 서버 로그인 요청
if (data.username) {
dispatch(login(data)); // 리덕스 저장 + 쿠키 저장 (username)
navigate("/"); // 메인 페이지로 이동
}
};
fetchData();
};
postUserLogin 함수 (userAPI.js)export const postUserLogin = async (data) => {
const response = await axios.post(`${USER_LOGIN}`, data, {
withCredentials: true, // 쿠키 포함 요청
});
return response.data;
};
/user/login 컨트롤러@PostMapping("/user/login")
public ResponseEntity login(@RequestBody UserDTO userDTO) {
...
// 1. Spring Security 인증
// 2. JWT AccessToken, RefreshToken 생성
// 3. 토큰을 HttpOnly 쿠키로 응답 헤더에 설정
// 4. body에는 username 등 사용자 정보 반환
}
if (data.username) {
dispatch(login(data)); // ✅ 여기서 Redux slice 호출됨
}
loginSlicelogin: (state, action) => {
state.username = action.payload.username;
Cookies.set("username", state.username, 1); // 쿠키 저장 (JS 접근 가능)
}
HttpOnly Cookie → JS에서 접근 불가 (보안성 높음)HttpOnly Cookiedata)를 보고 리덕스에 "얘 로그인 상태야!" 라고 알려줌.dispatch(login(data))는 리덕스 직원에게 "로그인 상태로 바꿔줘"라고 지시하는 명령어예요.