<!-- 로그인 상태라면 -->
<c:if test="${not empty accountPk }">
<a href="${pageContext.request.contextPath}/myPage.do"
class="dropdown-item">마이페이지</a>
<a href="${pageContext.request.contextPath}/cartPage.do"
class="dropdown-item">장바구니</a>
<a href="${pageContext.request.contextPath}/wishlistPage.do"
class="dropdown-item">좋아요 목록</a>
<a href="${pageContext.request.contextPath}/logout.do"
class="dropdown-item">로그아웃</a>
</c:if>
기존 코드에서 로그아웃을 누르면 바로 메인 페이지로 넘어간다
로그아웃 버튼을 눌렀을 때 모달창에서 예, 아니오를 통해 사용자 편의를 제공하는 방향으로 코드를 수정해보려한다
<!-- 로그인 상태라면 -->
<c:if test="${not empty accountPk }">
<a href="${pageContext.request.contextPath}/myPage.do"
class="dropdown-item">마이페이지</a>
<a href="${pageContext.request.contextPath}/cartPage.do"
class="dropdown-item">장바구니</a>
<a href="${pageContext.request.contextPath}/wishlistPage.do"
class="dropdown-item">좋아요 목록</a>
<!-- <a href="${pageContext.request.contextPath}/logout.do"
class="dropdown-item">로그아웃</a>-->
<a href="#" id="logoutBtn" class="dropdown-item"
data-bs-toggle="modal" data-bs-target="#logoutModal">
로그아웃 </a>
</c:if>
<!-- 로그아웃 확인 모달 -->
<div class="modal fade" id="logoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header border-0"> <!-- 헤더 선 제거 -->
<h5 class="modal-title w-100 text-center" id="logoutModalLabel">로그아웃</h5> <!-- 제목 가운데 정렬 -->
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body text-center"> <!-- 본문 가운데 정렬 -->
로그아웃 하시겠습니까?
</div>
<div class="modal-footer justify-content-center border-0"> <!-- 버튼 가운데 정렬, 선 제거 -->
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">아니오</button>
<button type="button" class="btn btn-secondary" id="confirmLogoutBtn">예</button>
</div>
</div>
</div>
</div>
<!-- 로그아웃 완료 모달 -->
<div class="modal fade" id="logoutSuccessModal" tabindex="-1" aria-labelledby="logoutSuccessLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content text-center p-3">
<div class="modal-body">
<i class="fas fa-check-circle fa-3x text-success mb-2"></i>
<h5>로그아웃 되었습니다</h5>
</div>
</div>
</div>
</div>
<!-- 로그아웃 스크립트 -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const confirmBtn = document.getElementById('confirmLogoutBtn');
if(confirmBtn){
confirmBtn.addEventListener('click', function() {
// 로그아웃 모달 닫기
const logoutModal = bootstrap.Modal.getInstance(document.getElementById('logoutModal'));
logoutModal.hide();
// AJAX 로그아웃 요청
fetch('${pageContext.request.contextPath}/logout.do', {
method: 'POST',
credentials: 'same-origin'
})
.then(res => {
if(res.ok){
// 완료 모달 띄우기
const successModal = new bootstrap.Modal(document.getElementById('logoutSuccessModal'));
successModal.show();
// UI 갱신: 로그인/회원가입 버튼 보이게, 마이페이지/장바구니/로그아웃 숨기기
document.getElementById('loginBtn')?.classList.remove('d-none');
document.getElementById('joinBtn')?.classList.remove('d-none');
document.getElementById('myPageBtn')?.classList.add('d-none');
document.getElementById('cartBtn')?.classList.add('d-none');
document.getElementById('wishlistBtn')?.classList.add('d-none');
document.getElementById('logoutBtn')?.classList.add('d-none');
}
})
.catch(err => console.error('로그아웃 실패:', err));
});
}
});
</script>
현재
로그아웃 클릭시 모달이 뜨고, 모달 안에서 "예"를 누르면 AJAX로 로그아웃 처리를 한다
아니오를 누르면 모달이 닫힌다
'🎅 오너먼트 프로젝트' 카테고리의 다른 글
| 장바구니 AJAX 비동기처리 코드 분석 (0) | 2026.01.03 |
|---|---|
| 실제 서비스에서 카카오페이 결제를 안전하게 처리할 때 서버가 필요한 흐름 (0) | 2025.12.29 |
| 결제 API (with 페이 디벨롭퍼) (0) | 2025.12.28 |
| 주소를 로그하지 못하였습니다 (0) | 2025.12.27 |
| 상품 상세 보기에서 "바로 구매" 시 빈문자열로 넘어오는 a태그 (0) | 2025.12.24 |