앱 브릿지 토큰 요청 및 로그아웃 기능 추가
- requestToken 함수 구현 및 토큰 저장 로직 추가 - 토큰 null 체크 및 자동 로그아웃 처리 - 환경 변수 및 빌드 설정 업데이트 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -30,7 +30,7 @@ FROM httpd:2.4-alpine AS production
|
||||
RUN apk add --no-cache bash
|
||||
|
||||
# Copy built application from builder stage
|
||||
COPY --from=builder /app/dist /usr/local/apache2/htdocs/
|
||||
COPY --from=builder /app/build /usr/local/apache2/htdocs/
|
||||
|
||||
# Copy Apache configuration
|
||||
COPY docker/apache.conf /usr/local/apache2/conf/httpd.conf
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<title>나이스가맹점관리자</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
||||
<title>나이스가맹점관리자</title>
|
||||
<!--파비콘-->
|
||||
<link rel="shortcut icon" href="src/shared/ui/assets/images/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="src/shared/ui/assets/images/apple-icon-180x180.png">
|
||||
|
||||
@@ -16,12 +16,11 @@ const initApp = async () => {
|
||||
(async () => {
|
||||
await initApp();
|
||||
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
|
||||
|
||||
root.render(
|
||||
<React.StrictMode>
|
||||
<AppProvider>
|
||||
<App />
|
||||
</AppProvider>
|
||||
</React.StrictMode>,
|
||||
);
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
|
||||
export const HomePage = () => {
|
||||
const { callLogin } = useUserInfo();
|
||||
const { openBiometricRegistrationPopup } = useAppBridge();
|
||||
const { isNativeEnvironment, openBiometricRegistrationPopup, requestToken, logout } = useAppBridge();
|
||||
useSetHeaderTitle('');
|
||||
useSetHeaderType(HeaderType.Home);
|
||||
useSetFooterMode(true);
|
||||
@@ -41,6 +41,51 @@ export const HomePage = () => {
|
||||
};
|
||||
*/
|
||||
|
||||
const handleRequestToken = useCallback(async () =>{
|
||||
console.log('handleRequestToken');
|
||||
alert('handleRequestToken');
|
||||
requestToken()
|
||||
.then((token) => {
|
||||
if (!token) {
|
||||
// 토큰이 null인 경우 로그아웃 처리
|
||||
console.error('Token is null, performing logout');
|
||||
useStore.getState().UserStore.resetUserInfo();
|
||||
setLoginSuccess(false);
|
||||
logout();
|
||||
return;
|
||||
}
|
||||
console.log('token', 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);
|
||||
|
||||
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,
|
||||
});
|
||||
|
||||
setLoginSuccess(true);
|
||||
})
|
||||
.catch((error) => {
|
||||
// 토큰 요청 실패 시 로그아웃 처리
|
||||
console.error('Failed to request token:', error);
|
||||
useStore.getState().UserStore.resetUserInfo();
|
||||
setLoginSuccess(false);
|
||||
logout();
|
||||
});
|
||||
|
||||
}, []);
|
||||
|
||||
const userParmas = {
|
||||
id: 'nictest00',
|
||||
password: 'nictest00'
|
||||
@@ -48,7 +93,7 @@ export const HomePage = () => {
|
||||
|
||||
const handleLogin = useCallback(async () =>{
|
||||
//let appStart = getLocalStorage(StorageKeys.AppStart);
|
||||
|
||||
alert('handleLogin');
|
||||
//if(!!appStart){
|
||||
if(false){
|
||||
useStore.getState().UserStore.resetUserInfo();
|
||||
@@ -80,6 +125,7 @@ export const HomePage = () => {
|
||||
}, []);
|
||||
|
||||
const checkBottomBannerOpen = () => {
|
||||
console.log('checkBottomBannerOpen');
|
||||
if(!!bannerToday){
|
||||
bannerToday = bannerToday.toString();
|
||||
}
|
||||
@@ -92,7 +138,7 @@ export const HomePage = () => {
|
||||
setAuthRegisterOn(true);
|
||||
}
|
||||
}).catch((e) => {
|
||||
console.log('catch')
|
||||
console.log('catch', e)
|
||||
|
||||
}).finally(() => {
|
||||
console.log('finally')
|
||||
@@ -102,7 +148,17 @@ export const HomePage = () => {
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
handleLogin();
|
||||
// handleRequestToken();
|
||||
if (isNativeEnvironment) {
|
||||
alert('isNativeEnvironment');
|
||||
console.log('isNativeEnvironment');
|
||||
handleRequestToken();
|
||||
} else {
|
||||
alert('not isNativeEnvironment');
|
||||
console.log('not isNativeEnvironment');
|
||||
handleLogin();
|
||||
}
|
||||
|
||||
checkBottomBannerOpen();
|
||||
checkAuthRegisterOpen();
|
||||
}, []);
|
||||
@@ -133,7 +189,7 @@ export const HomePage = () => {
|
||||
<div className="tab-content blue">
|
||||
<div className="tab-pane dashboard active">
|
||||
<FavoriteWrapper></FavoriteWrapper>
|
||||
{ !!loginSuccess &&
|
||||
{ loginSuccess &&
|
||||
<DayStatusBox></DayStatusBox>
|
||||
}
|
||||
</div>
|
||||
|
||||
@@ -67,7 +67,7 @@ const onResponseRejected = (error: AxiosError) => {
|
||||
};
|
||||
|
||||
export const initAxios = () => {
|
||||
axios.defaults.withCredentials = true;
|
||||
axios.defaults.withCredentials = false;
|
||||
axios.defaults.timeout = 15000;
|
||||
axios.defaults.transitional = {
|
||||
clarifyTimeoutError: true,
|
||||
|
||||
@@ -71,7 +71,7 @@ export default ({ mode }) => {
|
||||
},
|
||||
},
|
||||
esbuild: {
|
||||
drop: ['console'],
|
||||
drop: [],
|
||||
},
|
||||
plugins: plugins,
|
||||
server: {
|
||||
|
||||
Reference in New Issue
Block a user