로그인 이후 index.html 에서 처리 해야하는 로직 복원

This commit is contained in:
Rinjae
2025-12-03 21:05:55 +09:00
parent 0cc7d3f9e0
commit d2d9e53552
3 changed files with 146 additions and 0 deletions
@@ -0,0 +1,127 @@
/**
* 로그인 성공 후 처리 핸들러
*
* PortalAuthenticationSuccessHandler에서 세션에 설정한 값들을 읽어
* 적절한 팝업을 표시하고 리다이렉트를 처리합니다.
*
* 필요한 세션 속성:
* - success: 일반 성공 메시지
* - session.emailVerificationRequired: 이메일 인증 필요 여부
* - session.dormantAccount: 휴면 계정 여부
* - session.passwordExpired: 비밀번호 만료 여부
* - session.pendingInvitation: 법인 초대 대기 여부
* - session.pendingInvitationToken: 초대 토큰
* - session.pendingInvitationOrgName: 초대 기관명
* - session.redirectUrl: 리다이렉트 URL
*
* 의존성:
* - jQuery ($)
* - customPopups (custom-popups.js)
*
* @see PortalAuthenticationSuccessHandler.java
*/
var LoginSuccessHandler = (function() {
'use strict';
var config = {
successMsg: null,
emailVerificationRequired: false,
dormantAccount: false,
passwordExpired: false,
pendingInvitation: false,
pendingInvitationToken: '',
pendingInvitationOrgName: '',
sessionSuccessMsg: '',
redirectUrl: ''
};
/**
* 핸들러 초기화
* @param {Object} options - Thymeleaf에서 전달받은 세션 값들
*/
function init(options) {
if (!options) {
console.warn('LoginSuccessHandler: options not provided');
return;
}
config = $.extend({}, config, options);
console.log('LoginSuccessHandler initialized:', config);
handleLoginSuccess();
}
/**
* 로그인 성공 후 처리 로직 실행
*/
function handleLoginSuccess() {
// 1. 기존 success 메시지 처리
if (config.successMsg) {
console.log("Success message:", config.successMsg);
customPopups.showAlert(config.successMsg);
}
// 2. 이메일 인증 체크
if (config.emailVerificationRequired) {
console.log('emailVerifyMsg:', config.sessionSuccessMsg);
console.log('redirectUrl:', config.redirectUrl);
customPopups.showAlert(config.sessionSuccessMsg);
$('#customAlertOkButton').off('click.loginHandler').on('click.loginHandler', function() {
customPopups.hideAlert('#customAlert');
window.location.href = config.redirectUrl;
});
return; // 다른 체크 중단
}
// 3. 장기미사용 계정 체크
if (config.dormantAccount) {
console.log('dormantMsg:', config.sessionSuccessMsg);
console.log('redirectUrl:', config.redirectUrl);
customPopups.showAlert(config.sessionSuccessMsg);
$('#customAlertOkButton').off('click.loginHandler').on('click.loginHandler', function() {
customPopups.hideAlert('#customAlert');
window.location.href = config.redirectUrl;
});
return; // 다른 체크 중단
}
// 4. 비밀번호 만료 체크
if (config.passwordExpired) {
var formattedMsg = config.sessionSuccessMsg ? config.sessionSuccessMsg.replace(/\n/g, '<br>') : '';
console.log('pwdExpiredMsg:', config.sessionSuccessMsg);
console.log('redirectUrl:', config.redirectUrl);
$('#customAlertMessage').html(formattedMsg);
$('#customAlert').css('display', 'flex');
$('#customAlertOkButton').off('click.loginHandler').on('click.loginHandler', function() {
customPopups.hideAlert('#customAlert');
window.location.href = config.redirectUrl;
});
return; // 다른 체크 중단
}
// 5. 초대 대기 확인 (로그인할 때마다 표시)
if (config.pendingInvitation) {
var orgName = config.pendingInvitationOrgName || '알 수 없는 기관';
var token = config.pendingInvitationToken;
customPopups.showConfirm(
'<strong>' + orgName + '</strong>에서 초대가 도착했습니다.<br>초대를 확인하시겠습니까?',
function(selection) {
if (selection) {
window.location.href = '/signup/decision?invitation=' + token;
}
}
);
}
}
// Public API
return {
init: init
};
})();
@@ -329,6 +329,24 @@
</th:block>
</body>
<th:block layout:fragment="contentScript">
<!-- 로그인 후 처리 스크립트 -->
<script th:src="@{/js/login-success-handler.js}"></script>
<script th:inline="javascript">
$(document).ready(function() {
LoginSuccessHandler.init({
successMsg: [[${success}]],
emailVerificationRequired: [[${session.emailVerificationRequired}]],
dormantAccount: [[${session.dormantAccount}]],
passwordExpired: [[${session.passwordExpired}]],
pendingInvitation: [[${session.pendingInvitation}]],
pendingInvitationToken: [[${session.pendingInvitationToken}]],
pendingInvitationOrgName: [[${session.pendingInvitationOrgName}]],
sessionSuccessMsg: [[${session.success}]],
redirectUrl: [[${session.redirectUrl}]]
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// ========================================