login test

This commit is contained in:
focp212@naver.com
2025-10-13 17:46:10 +09:00
parent 6d4f2c749e
commit e9758f2240
3 changed files with 67 additions and 124 deletions

View File

@@ -1,49 +1,69 @@
import { LoginParams } from '@/entities/user/model/types';
import { LoginParams, LoginResponse } from '@/entities/user/model/types';
import { StorageKeys } from '@/shared/constants/local-storage';
import { setLocalStorage } from '@/shared/lib/web-view-bridge';
import { useLoginMutation } from '@/entities/user/api/use-login-mutation';
import { useStore } from '~/shared/model/store';
import { useAppBridge } from '@/hooks';
export const useUserInfo = () => {
const { mutateAsync: login } = useLoginMutation();
const callLogin = async (params: LoginParams) => {
const {
isNativeEnvironment,
requestToken,
logout
} = useAppBridge();
const callLogin = async (params?: LoginParams) => {
try{
useStore.getState().UserStore.resetUserInfo();
const result = await login(params);
if(result.requires2FA){
// 2차인증 필요
}
else{
const {
tokenType,
accessToken,
refreshToken,
accessTokenExpiresIn,
refreshTokenExpiresIn,
menuGrants,
clientAddressIP,
requires2FA
} = result;
setLocalStorage(StorageKeys.TokenType, tokenType);
setLocalStorage(StorageKeys.AccessToken, accessToken);
setLocalStorage(StorageKeys.RefreshToken, refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, menuGrants);
setLocalStorage(StorageKeys.Usrid, params.id);
setLocalStorage(StorageKeys.ClientAddressIP, clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, requires2FA);
if(isNativeEnvironment){
const result: LoginResponse = await requestToken();
if(!result) {
// 토큰이 null인 경우 로그아웃 처리
console.error('Token is null, performing logout');
useStore.getState().UserStore.resetUserInfo();
logout();
return;
}
setLocalStorage(StorageKeys.TokenType, result.tokenType);
setLocalStorage(StorageKeys.AccessToken, result.accessToken);
setLocalStorage(StorageKeys.RefreshToken, result.refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, result.accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, result.refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, result.menuGrants);
setLocalStorage(StorageKeys.ClientAddressIP, result.clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, result.requires2FA);
setLocalStorage(StorageKeys.Usrid, result.usrid);
useStore.getState().UserStore.setUserInfo({
...result,
usrid: params.id
...result
});
}
else{
// 개발용 ...
if(params){
const result = await login(params);
setLocalStorage(StorageKeys.TokenType, result.tokenType);
setLocalStorage(StorageKeys.AccessToken, result.accessToken);
setLocalStorage(StorageKeys.RefreshToken, result.refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, result.accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, result.refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, result.menuGrants);
setLocalStorage(StorageKeys.ClientAddressIP, result.clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, result.requires2FA);
setLocalStorage(StorageKeys.Usrid, params.id);
useStore.getState().UserStore.setUserInfo({
...result,
usrid: params.id
});
}
}
}
catch(e: any){
catch(error: any){
console.error('Failed to request token:', error);
useStore.getState().UserStore.resetUserInfo();
logout();
}
};
return {

View File

@@ -1,6 +1,7 @@
import { useState, useEffect, useCallback } from 'react';
import { appBridge } from '@/utils/appBridge';
import { DeviceInfo, ShareContent } from '@/types';
import { LoginResponse } from '@/entities/user/model/types';
interface UseAppBridgeReturn {
isNativeEnvironment: boolean;
@@ -42,7 +43,7 @@ interface UseAppBridgeReturn {
logout: () => Promise<void>;
// 토큰 요청
requestToken: () => Promise<any>;
requestToken: () => Promise<LoginResponse>;
requestRefreshToken: () => Promise<any>;
// 간편 인증 등록
@@ -241,14 +242,7 @@ export const useAppBridge = (): UseAppBridgeReturn => {
showAlert,
showConfirm,
setStorage,
// getStorage,
removeStorage,
/*
openCamera,
openGallery,
getLocation,
getContacts,
*/
shareContent,
logout,
requestToken,

View File

@@ -31,7 +31,6 @@ export interface ContextType {
};
export const SubLayout = () => {
const { reload } = useNavigate();
useScrollToTop();
const [onBack, setOnBack] = useState(undefined);
const [headerTitle, setHeaderTitle] = useState<string>('');
@@ -44,61 +43,13 @@ export const SubLayout = () => {
const [headerNavigationKey, setHeaderNavigationKey] = useState<number>(1);
const { callLogin } = useUserInfo();
const {
isNativeEnvironment,
openBiometricRegistrationPopup,
requestToken,
logout
} = useAppBridge();
const { isNativeEnvironment } = useAppBridge();
const { mutateAsync: homeGroups } = useHomeGroupsMutation();
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
const wrapperClassName = 'wrapper';
const handleRequestToken = useCallback(async () =>{
requestToken().then((token) => {
if(!token) {
// 토큰이 null인 경우 로그아웃 처리
console.error('Token is null, performing logout');
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
return;
}
console.log('token ' + JSON.stringify(token));
setLocalStorage(StorageKeys.Usrid, token.usrid);
setLocalStorage(StorageKeys.TokenType, token.tokenType);
setLocalStorage(StorageKeys.AccessToken, token.accessToken);
setLocalStorage(StorageKeys.RefreshToken, token.refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, token.accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, token.refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, token.menuGrants);
setLocalStorage(StorageKeys.ClientAddressIP, token.clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, token.requires2FA);
useStore.getState().UserStore.setUserInfo({
usrid: token.usrid,
tokenType: token.tokenType,
accessToken: token.accessToken,
refreshToken: token.refreshToken,
accessTokenExpiresIn: token.accessTokenExpiresIn,
refreshTokenExpiresIn: token.refreshTokenExpiresIn,
menuGrants: token.menuGrants,
clientAddressIP: token.clientAddressIP,
requires2FA: token.requires2FA,
});
callHomeGroups();
}).catch((error) => {
// 토큰 요청 실패 시 로그아웃 처리
console.error('Failed to request token:', error);
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
});
}, []);
const callHomeGroups = () => {
let userInfo = useStore.getState().UserStore.userInfo;
let params: HomeGroupsParams = {
@@ -119,50 +70,28 @@ export const SubLayout = () => {
}
setLoginSuccess(true);
setHeaderNavigationKey(headerNavigationKey + 1);
reLogin();
});
};
const reLogin = () => {
console.log('reLogin');
let userInfo = useStore.getState().UserStore.userInfo;
if(userInfo.accessTokenExpiresIn){
let accessTokenExpiresIn = userInfo.accessTokenExpiresIn;
let timer = setTimeout(() => {
if(isNativeEnvironment){
handleRequestToken();
}
else{
handleLogin();
}
}, accessTokenExpiresIn * 1000);
}
};
const handleLogin = useCallback(async () => {
const userParmas = {
id: 'nictest00',
password: 'nictest00'
};
let userParmas;
if(!isNativeEnvironment){
userParmas = {
id: 'nictest00',
password: 'nictest00'
};
}
callLogin(userParmas).then(() => {
callHomeGroups();
}).catch((error: any) => {
setLoginSuccess(false);
});
}, []);
const tokenTimeCheck = () => {
}
useEffect(() => {
console.log('isNativeEnvironment : ['+isNativeEnvironment+']');
if(isNativeEnvironment){
handleRequestToken();
}
else{
handleLogin();
}
handleLogin();
}, []);
return (