login test
This commit is contained in:
@@ -1,40 +1,57 @@
|
|||||||
import { LoginParams } from '@/entities/user/model/types';
|
import { LoginParams, LoginResponse } from '@/entities/user/model/types';
|
||||||
import { StorageKeys } from '@/shared/constants/local-storage';
|
import { StorageKeys } from '@/shared/constants/local-storage';
|
||||||
import { setLocalStorage } from '@/shared/lib/web-view-bridge';
|
import { setLocalStorage } from '@/shared/lib/web-view-bridge';
|
||||||
import { useLoginMutation } from '@/entities/user/api/use-login-mutation';
|
import { useLoginMutation } from '@/entities/user/api/use-login-mutation';
|
||||||
import { useStore } from '~/shared/model/store';
|
import { useStore } from '~/shared/model/store';
|
||||||
|
import { useAppBridge } from '@/hooks';
|
||||||
|
|
||||||
export const useUserInfo = () => {
|
export const useUserInfo = () => {
|
||||||
const { mutateAsync: login } = useLoginMutation();
|
const { mutateAsync: login } = useLoginMutation();
|
||||||
const callLogin = async (params: LoginParams) => {
|
const {
|
||||||
|
isNativeEnvironment,
|
||||||
|
requestToken,
|
||||||
|
logout
|
||||||
|
} = useAppBridge();
|
||||||
|
const callLogin = async (params?: LoginParams) => {
|
||||||
try{
|
try{
|
||||||
useStore.getState().UserStore.resetUserInfo();
|
useStore.getState().UserStore.resetUserInfo();
|
||||||
|
|
||||||
const result = await login(params);
|
if(isNativeEnvironment){
|
||||||
if(result.requires2FA){
|
const result: LoginResponse = await requestToken();
|
||||||
// 2차인증 필요
|
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
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
const {
|
// 개발용 ...
|
||||||
tokenType,
|
if(params){
|
||||||
accessToken,
|
const result = await login(params);
|
||||||
refreshToken,
|
setLocalStorage(StorageKeys.TokenType, result.tokenType);
|
||||||
accessTokenExpiresIn,
|
setLocalStorage(StorageKeys.AccessToken, result.accessToken);
|
||||||
refreshTokenExpiresIn,
|
setLocalStorage(StorageKeys.RefreshToken, result.refreshToken);
|
||||||
menuGrants,
|
setLocalStorage(StorageKeys.AccessTokenExpiresIn, result.accessTokenExpiresIn);
|
||||||
clientAddressIP,
|
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, result.refreshTokenExpiresIn);
|
||||||
requires2FA
|
setLocalStorage(StorageKeys.MenuGrants, result.menuGrants);
|
||||||
} = result;
|
setLocalStorage(StorageKeys.ClientAddressIP, result.clientAddressIP);
|
||||||
setLocalStorage(StorageKeys.TokenType, tokenType);
|
setLocalStorage(StorageKeys.Requires2FA, result.requires2FA);
|
||||||
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.Usrid, params.id);
|
||||||
setLocalStorage(StorageKeys.ClientAddressIP, clientAddressIP);
|
|
||||||
setLocalStorage(StorageKeys.Requires2FA, requires2FA);
|
|
||||||
|
|
||||||
useStore.getState().UserStore.setUserInfo({
|
useStore.getState().UserStore.setUserInfo({
|
||||||
...result,
|
...result,
|
||||||
@@ -42,8 +59,11 @@ export const useUserInfo = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(e: any){
|
}
|
||||||
|
catch(error: any){
|
||||||
|
console.error('Failed to request token:', error);
|
||||||
|
useStore.getState().UserStore.resetUserInfo();
|
||||||
|
logout();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { useState, useEffect, useCallback } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { appBridge } from '@/utils/appBridge';
|
import { appBridge } from '@/utils/appBridge';
|
||||||
import { DeviceInfo, ShareContent } from '@/types';
|
import { DeviceInfo, ShareContent } from '@/types';
|
||||||
|
import { LoginResponse } from '@/entities/user/model/types';
|
||||||
|
|
||||||
interface UseAppBridgeReturn {
|
interface UseAppBridgeReturn {
|
||||||
isNativeEnvironment: boolean;
|
isNativeEnvironment: boolean;
|
||||||
@@ -42,7 +43,7 @@ interface UseAppBridgeReturn {
|
|||||||
logout: () => Promise<void>;
|
logout: () => Promise<void>;
|
||||||
|
|
||||||
// 토큰 요청
|
// 토큰 요청
|
||||||
requestToken: () => Promise<any>;
|
requestToken: () => Promise<LoginResponse>;
|
||||||
requestRefreshToken: () => Promise<any>;
|
requestRefreshToken: () => Promise<any>;
|
||||||
|
|
||||||
// 간편 인증 등록
|
// 간편 인증 등록
|
||||||
@@ -241,14 +242,7 @@ export const useAppBridge = (): UseAppBridgeReturn => {
|
|||||||
showAlert,
|
showAlert,
|
||||||
showConfirm,
|
showConfirm,
|
||||||
setStorage,
|
setStorage,
|
||||||
// getStorage,
|
|
||||||
removeStorage,
|
removeStorage,
|
||||||
/*
|
|
||||||
openCamera,
|
|
||||||
openGallery,
|
|
||||||
getLocation,
|
|
||||||
getContacts,
|
|
||||||
*/
|
|
||||||
shareContent,
|
shareContent,
|
||||||
logout,
|
logout,
|
||||||
requestToken,
|
requestToken,
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ export interface ContextType {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const SubLayout = () => {
|
export const SubLayout = () => {
|
||||||
const { reload } = useNavigate();
|
|
||||||
useScrollToTop();
|
useScrollToTop();
|
||||||
const [onBack, setOnBack] = useState(undefined);
|
const [onBack, setOnBack] = useState(undefined);
|
||||||
const [headerTitle, setHeaderTitle] = useState<string>('');
|
const [headerTitle, setHeaderTitle] = useState<string>('');
|
||||||
@@ -44,61 +43,13 @@ export const SubLayout = () => {
|
|||||||
const [headerNavigationKey, setHeaderNavigationKey] = useState<number>(1);
|
const [headerNavigationKey, setHeaderNavigationKey] = useState<number>(1);
|
||||||
|
|
||||||
const { callLogin } = useUserInfo();
|
const { callLogin } = useUserInfo();
|
||||||
const {
|
|
||||||
isNativeEnvironment,
|
const { isNativeEnvironment } = useAppBridge();
|
||||||
openBiometricRegistrationPopup,
|
|
||||||
requestToken,
|
|
||||||
logout
|
|
||||||
} = useAppBridge();
|
|
||||||
const { mutateAsync: homeGroups } = useHomeGroupsMutation();
|
const { mutateAsync: homeGroups } = useHomeGroupsMutation();
|
||||||
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
|
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
|
||||||
|
|
||||||
const wrapperClassName = 'wrapper';
|
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 = () => {
|
const callHomeGroups = () => {
|
||||||
let userInfo = useStore.getState().UserStore.userInfo;
|
let userInfo = useStore.getState().UserStore.userInfo;
|
||||||
let params: HomeGroupsParams = {
|
let params: HomeGroupsParams = {
|
||||||
@@ -120,49 +71,27 @@ export const SubLayout = () => {
|
|||||||
setLoginSuccess(true);
|
setLoginSuccess(true);
|
||||||
setHeaderNavigationKey(headerNavigationKey + 1);
|
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 handleLogin = useCallback(async () => {
|
||||||
const userParmas = {
|
let userParmas;
|
||||||
|
if(!isNativeEnvironment){
|
||||||
|
userParmas = {
|
||||||
id: 'nictest00',
|
id: 'nictest00',
|
||||||
password: 'nictest00'
|
password: 'nictest00'
|
||||||
};
|
};
|
||||||
|
}
|
||||||
callLogin(userParmas).then(() => {
|
callLogin(userParmas).then(() => {
|
||||||
callHomeGroups();
|
callHomeGroups();
|
||||||
|
}).catch((error: any) => {
|
||||||
|
setLoginSuccess(false);
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const tokenTimeCheck = () => {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log('isNativeEnvironment : ['+isNativeEnvironment+']');
|
|
||||||
if(isNativeEnvironment){
|
|
||||||
handleRequestToken();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
handleLogin();
|
handleLogin();
|
||||||
}
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user