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)
if (result.data.result.code === 200) {
let finalResult = {}
if (result.data.result.resultCode === 'S') {
tracking({
url: `/api/auth/login`,
data: JSON.stringify({
@ -72,52 +74,64 @@ export async function POST(request: Request) {
console.log('end session edit!')
await session.save()
}
const resultForSession = {
LANG_CD: result.data.data.langCd,
CURR_PAGE: result.data.data.currPage,
ROW_COUNT: result.data.data.rowCount,
START_ROW: result.data.data.startRow,
END_ROW: result.data.data.endRow,
COMP_CD: result.data.data.compCd,
AGENCY_STORE_ID: result.data.data.agencyStoreId,
STORE_ID: result.data.data.storeId,
STORE_NM: result.data.data.storeNm,
USER_ID: result.data.data.userId,
CATEGORY: result.data.data.category,
USER_NM: result.data.data.userNm,
USER_NM_KANA: result.data.data.userNmKana,
TEL_NO: result.data.data.telNo,
FAX: result.data.data.fax,
EMAIL: result.data.data.email,
LAST_EDIT_USER: result.data.data.lastEditUser,
STORE_GUBUN: result.data.data.storeGubun,
PW_CURR: result.data.data.pwCurr,
PWD_INIT_YN: result.data.data.pwdInitYn,
APPR_STAT_CD: result.data.data.apprStatCd,
LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
GROUP_ID: result.data.data.groupId,
STORE_LVL: result.data.data.storeLvl,
CUST_CD: result.data.data.custCd,
BUILDER_NO: result.data.data.builderNo,
IS_LOGGED_IN: true,
ROLE: '',
}
const resultForSession = {
LANG_CD: result.data.data.langCd,
CURR_PAGE: result.data.data.currPage,
ROW_COUNT: result.data.data.rowCount,
START_ROW: result.data.data.startRow,
END_ROW: result.data.data.endRow,
COMP_CD: result.data.data.compCd,
AGENCY_STORE_ID: result.data.data.agencyStoreId,
STORE_ID: result.data.data.storeId,
STORE_NM: result.data.data.storeNm,
USER_ID: result.data.data.userId,
CATEGORY: result.data.data.category,
USER_NM: result.data.data.userNm,
USER_NM_KANA: result.data.data.userNmKana,
TEL_NO: result.data.data.telNo,
FAX: result.data.data.fax,
EMAIL: result.data.data.email,
LAST_EDIT_USER: result.data.data.lastEditUser,
STORE_GUBUN: result.data.data.storeGubun,
PW_CURR: result.data.data.pwCurr,
PWD_INIT_YN: result.data.data.pwdInitYn,
APPR_STAT_CD: result.data.data.apprStatCd,
LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
GROUP_ID: result.data.data.groupId,
STORE_LVL: result.data.data.storeLvl,
CUST_CD: result.data.data.custCd,
BUILDER_NO: result.data.data.builderNo,
IS_LOGGED_IN: true,
ROLE: '',
}
if (result.data.data.userId === 'T01') {
resultForSession.ROLE = 'T01'
} else if (result.data.data.groupId === '60000') {
resultForSession.ROLE = 'Admin'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
resultForSession.ROLE = 'Admin_Sub'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
resultForSession.ROLE = 'Builder'
if (result.data.data.userId === 'T01') {
resultForSession.ROLE = 'T01'
} else if (result.data.data.groupId === '60000') {
resultForSession.ROLE = 'Admin'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
resultForSession.ROLE = 'Admin_Sub'
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
resultForSession.ROLE = 'Builder'
} else {
resultForSession.ROLE = 'User'
}
finalResult = {
code: 200,
message: 'Login is Succecss!!',
result: resultForSession,
}
} 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)
}
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 {
code: number
message: string | null
@ -85,6 +105,9 @@ export default function Login() {
...loginData?.result,
})
router.push('/')
} else if (loginData?.code === 400) {
alert(loginData?.message)
setAccount({ loginId: '', pwd: '' })
}
}, [loginData])
@ -106,6 +129,7 @@ export default function Login() {
className="login-frame"
placeholder="Input Frame ID"
value={account.loginId}
onKeyDown={(e) => handleKeyDown(e)}
onChange={(e) => setAccount({ loginId: e.target.value })}
/>
<button className="login-icon" onClick={() => setAccount({ loginId: '' })}>
@ -120,6 +144,7 @@ export default function Login() {
className="login-frame"
placeholder="Input Frame PW"
value={account.pwd}
onKeyDown={(e) => handleKeyDown(e)}
onChange={(e) => setAccount({ pwd: e.target.value })}
/>
<button className={`login-icon ${pwShow ? 'act' : ''}`} onClick={() => setPwShow(!pwShow)}>
@ -141,7 +166,7 @@ export default function Login() {
</div>
</div>
<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>
</button>
</div>