로그인 이후 index.html 에서 처리 해야하는 로직 복원
This commit is contained in:
@@ -103,4 +103,5 @@ TODO.txt
|
|||||||
*.log
|
*.log
|
||||||
.claude
|
.claude
|
||||||
*.report.md
|
*.report.md
|
||||||
|
*.claude.md
|
||||||
diff
|
diff
|
||||||
|
|||||||
@@ -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>
|
</th:block>
|
||||||
</body>
|
</body>
|
||||||
<th:block layout:fragment="contentScript">
|
<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>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// ========================================
|
// ========================================
|
||||||
|
|||||||
Reference in New Issue
Block a user