refactor: Enhance authentication API and login component functionality

- Updated authentication API to improve response handling and session management.
- Refactored login component to include validation and keyboard event handling for login submission.
- Improved user feedback by displaying alerts for login success and failure messages.
This commit is contained in:
yoosangwook 2025-05-23 10:06:45 +09:00
parent a5696984fc
commit 29e7675ada
2 changed files with 84 additions and 45 deletions

View File

@ -15,7 +15,9 @@ export async function POST(request: Request) {
}) })
console.log('🚀 ~ result ~ result:', result.data) console.log('🚀 ~ result ~ result:', result.data)
if (result.data.result.code === 200) { let finalResult = {}
if (result.data.result.resultCode === 'S') {
tracking({ tracking({
url: `/api/auth/login`, url: `/api/auth/login`,
data: JSON.stringify({ data: JSON.stringify({
@ -72,52 +74,64 @@ export async function POST(request: Request) {
console.log('end session edit!') console.log('end session edit!')
await session.save() await session.save()
}
const resultForSession = { const resultForSession = {
LANG_CD: result.data.data.langCd, LANG_CD: result.data.data.langCd,
CURR_PAGE: result.data.data.currPage, CURR_PAGE: result.data.data.currPage,
ROW_COUNT: result.data.data.rowCount, ROW_COUNT: result.data.data.rowCount,
START_ROW: result.data.data.startRow, START_ROW: result.data.data.startRow,
END_ROW: result.data.data.endRow, END_ROW: result.data.data.endRow,
COMP_CD: result.data.data.compCd, COMP_CD: result.data.data.compCd,
AGENCY_STORE_ID: result.data.data.agencyStoreId, AGENCY_STORE_ID: result.data.data.agencyStoreId,
STORE_ID: result.data.data.storeId, STORE_ID: result.data.data.storeId,
STORE_NM: result.data.data.storeNm, STORE_NM: result.data.data.storeNm,
USER_ID: result.data.data.userId, USER_ID: result.data.data.userId,
CATEGORY: result.data.data.category, CATEGORY: result.data.data.category,
USER_NM: result.data.data.userNm, USER_NM: result.data.data.userNm,
USER_NM_KANA: result.data.data.userNmKana, USER_NM_KANA: result.data.data.userNmKana,
TEL_NO: result.data.data.telNo, TEL_NO: result.data.data.telNo,
FAX: result.data.data.fax, FAX: result.data.data.fax,
EMAIL: result.data.data.email, EMAIL: result.data.data.email,
LAST_EDIT_USER: result.data.data.lastEditUser, LAST_EDIT_USER: result.data.data.lastEditUser,
STORE_GUBUN: result.data.data.storeGubun, STORE_GUBUN: result.data.data.storeGubun,
PW_CURR: result.data.data.pwCurr, PW_CURR: result.data.data.pwCurr,
PWD_INIT_YN: result.data.data.pwdInitYn, PWD_INIT_YN: result.data.data.pwdInitYn,
APPR_STAT_CD: result.data.data.apprStatCd, APPR_STAT_CD: result.data.data.apprStatCd,
LOGIN_FAIL_CNT: result.data.data.loginFailCnt, LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn, LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd, PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
GROUP_ID: result.data.data.groupId, GROUP_ID: result.data.data.groupId,
STORE_LVL: result.data.data.storeLvl, STORE_LVL: result.data.data.storeLvl,
CUST_CD: result.data.data.custCd, CUST_CD: result.data.data.custCd,
BUILDER_NO: result.data.data.builderNo, BUILDER_NO: result.data.data.builderNo,
IS_LOGGED_IN: true, IS_LOGGED_IN: true,
ROLE: '', ROLE: '',
} }
if (result.data.data.userId === 'T01') { if (result.data.data.userId === 'T01') {
resultForSession.ROLE = 'T01' resultForSession.ROLE = 'T01'
} else if (result.data.data.groupId === '60000') { } else if (result.data.data.groupId === '60000') {
resultForSession.ROLE = 'Admin' resultForSession.ROLE = 'Admin'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) { } else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
resultForSession.ROLE = 'Admin_Sub' resultForSession.ROLE = 'Admin_Sub'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) { } else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
resultForSession.ROLE = 'Builder' resultForSession.ROLE = 'Builder'
} else {
resultForSession.ROLE = 'User'
}
finalResult = {
code: 200,
message: 'Login is Succecss!!',
result: resultForSession,
}
} else { } else {
resultForSession.ROLE = 'User' finalResult = {
code: 400,
message: 'Login is Failed!!',
result: {},
}
} }
return NextResponse.json({ code: 200, message: 'Login is Succecss!!', result: resultForSession }) return NextResponse.json(finalResult)
} }

View File

@ -39,6 +39,26 @@ export default function Login() {
return emailRegex.test(email) return emailRegex.test(email)
} }
const handleLogin = () => {
if (validateLogin()) {
setIsLogin(true)
}
}
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.key === 'Enter') {
handleLogin()
}
}
const validateLogin = () => {
if (account.loginId === '' || account.pwd === '') {
alert('Please enter your ID and password.')
return false
}
return true
}
interface LoginData { interface LoginData {
code: number code: number
message: string | null message: string | null
@ -85,6 +105,9 @@ export default function Login() {
...loginData?.result, ...loginData?.result,
}) })
router.push('/') router.push('/')
} else if (loginData?.code === 400) {
alert(loginData?.message)
setAccount({ loginId: '', pwd: '' })
} }
}, [loginData]) }, [loginData])
@ -106,6 +129,7 @@ export default function Login() {
className="login-frame" className="login-frame"
placeholder="Input Frame ID" placeholder="Input Frame ID"
value={account.loginId} value={account.loginId}
onKeyDown={(e) => handleKeyDown(e)}
onChange={(e) => setAccount({ loginId: e.target.value })} onChange={(e) => setAccount({ loginId: e.target.value })}
/> />
<button className="login-icon" onClick={() => setAccount({ loginId: '' })}> <button className="login-icon" onClick={() => setAccount({ loginId: '' })}>
@ -120,6 +144,7 @@ export default function Login() {
className="login-frame" className="login-frame"
placeholder="Input Frame PW" placeholder="Input Frame PW"
value={account.pwd} value={account.pwd}
onKeyDown={(e) => handleKeyDown(e)}
onChange={(e) => setAccount({ pwd: e.target.value })} onChange={(e) => setAccount({ pwd: e.target.value })}
/> />
<button className={`login-icon ${pwShow ? 'act' : ''}`} onClick={() => setPwShow(!pwShow)}> <button className={`login-icon ${pwShow ? 'act' : ''}`} onClick={() => setPwShow(!pwShow)}>
@ -141,7 +166,7 @@ export default function Login() {
</div> </div>
</div> </div>
<div className="login-btn-wrap"> <div className="login-btn-wrap">
<button className="btn-frame icon login" onClick={() => setIsLogin(true)}> <button className="btn-frame icon login" onClick={handleLogin}>
<i className="btn-arr"></i> <i className="btn-arr"></i>
</button> </button>
</div> </div>