Merge pull request '모바일 환경 세션 타임아웃 연장 (30분 → 24시간)' (#274) from common/feat/dashboard-map into main

Reviewed-on: http://39.117.244.52:3000/kjs/ERP-node/pulls/274
This commit is contained in:
hyeonsu 2025-12-11 11:18:47 +09:00
commit 6735142db4
2 changed files with 39 additions and 2 deletions

View File

@ -16,6 +16,31 @@ interface AuthProviderProps {
children: React.ReactNode; children: React.ReactNode;
} }
/**
*
* WebView,
*/
function isMobileEnvironment(): boolean {
if (typeof window === "undefined") return false;
const userAgent = navigator.userAgent.toLowerCase();
// 모바일 기기 감지
const isMobileDevice = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);
// WebView 감지 (앱 내 브라우저)
const isWebView =
/wv/.test(userAgent) || // Android WebView
/webview/.test(userAgent) ||
(window as unknown as { webkit?: unknown }).webkit !== undefined || // iOS WKWebView
/fb_iab|fban|fbav/.test(userAgent) || // Facebook 앱 내 브라우저
/instagram/.test(userAgent) || // Instagram 앱 내 브라우저
/kakaotalk/.test(userAgent) || // 카카오톡 앱 내 브라우저
/naver/.test(userAgent); // 네이버 앱 내 브라우저
return isMobileDevice || isWebView;
}
/** /**
* *
* *
@ -29,12 +54,20 @@ export function AuthProvider({ children }: AuthProviderProps) {
// 세션 매니저 초기화 및 정리 // 세션 매니저 초기화 및 정리
useEffect(() => { useEffect(() => {
if (isLoggedIn) { if (isLoggedIn) {
// 모바일 환경 여부에 따라 타임아웃 시간 조정
const isMobile = isMobileEnvironment();
// 모바일: 24시간 (JWT 토큰 만료 시간과 동일), 데스크톱: 30분
const maxInactiveTime = isMobile ? 86400000 : 1800000;
// 모바일: 1시간 전 경고, 데스크톱: 5분 전 경고
const warningTimeConfig = isMobile ? 3600000 : 300000;
// 세션 매니저 초기화 // 세션 매니저 초기화
const manager = initSessionManager( const manager = initSessionManager(
{ {
checkInterval: 60000, // 1분마다 체크 checkInterval: 60000, // 1분마다 체크
warningTime: 300000, // 5분 전 경고 warningTime: warningTimeConfig,
maxInactiveTime: 1800000, // 30분 비활성 시 만료 maxInactiveTime: maxInactiveTime,
}, },
{ {
onWarning: (remainingTime: number) => { onWarning: (remainingTime: number) => {

View File

@ -1,6 +1,10 @@
/** /**
* *
* , , * , ,
*
* / :
* - 데스크톱: 30분 , 5
* - 모바일: 24시간 , 1 (WebView localStorage )
*/ */
interface SessionConfig { interface SessionConfig {