모바일 환경 세션 타임아웃 연장 (30분 → 24시간)
This commit is contained in:
parent
d6c5b3418d
commit
7725cd1e87
|
|
@ -16,6 +16,31 @@ interface AuthProviderProps {
|
|||
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(() => {
|
||||
if (isLoggedIn) {
|
||||
// 모바일 환경 여부에 따라 타임아웃 시간 조정
|
||||
const isMobile = isMobileEnvironment();
|
||||
|
||||
// 모바일: 24시간 (JWT 토큰 만료 시간과 동일), 데스크톱: 30분
|
||||
const maxInactiveTime = isMobile ? 86400000 : 1800000;
|
||||
// 모바일: 1시간 전 경고, 데스크톱: 5분 전 경고
|
||||
const warningTimeConfig = isMobile ? 3600000 : 300000;
|
||||
|
||||
// 세션 매니저 초기화
|
||||
const manager = initSessionManager(
|
||||
{
|
||||
checkInterval: 60000, // 1분마다 체크
|
||||
warningTime: 300000, // 5분 전 경고
|
||||
maxInactiveTime: 1800000, // 30분 비활성 시 만료
|
||||
warningTime: warningTimeConfig,
|
||||
maxInactiveTime: maxInactiveTime,
|
||||
},
|
||||
{
|
||||
onWarning: (remainingTime: number) => {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
/**
|
||||
* 세션 관리 유틸리티
|
||||
* 세션 만료 감지, 자동 로그아웃, 세션 갱신 등을 담당
|
||||
*
|
||||
* 모바일/데스크톱 환경별 타임아웃 설정:
|
||||
* - 데스크톱: 30분 비활성 시 만료, 5분 전 경고
|
||||
* - 모바일: 24시간 비활성 시 만료, 1시간 전 경고 (WebView localStorage 초기화 이슈 대응)
|
||||
*/
|
||||
|
||||
interface SessionConfig {
|
||||
|
|
|
|||
Loading…
Reference in New Issue