fix(WEB): 알림 폴링 시 인증 에러 처리 및 토큰 자동 갱신
- ApiResponse 타입에 authError 플래그 추가 - today-issue.ts에 인증 에러 감지 로직 추가 - AuthenticatedLayout에서 authError 시 토큰 갱신 후 재시도 - 토큰 갱신 실패 시 폴링 중지하여 반복 에러 방지
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
import { apiClient } from './index';
|
||||
import { AuthError } from './errors';
|
||||
import type {
|
||||
ApiResponse,
|
||||
TodayIssueUnreadResponse,
|
||||
@@ -13,6 +14,20 @@ import type {
|
||||
TodayIssueMarkAllReadResponse,
|
||||
} from '@/types/today-issue';
|
||||
|
||||
/**
|
||||
* 인증 에러인지 확인
|
||||
*/
|
||||
function isAuthenticationError(error: unknown): boolean {
|
||||
if (error instanceof AuthError) return true;
|
||||
if (error && typeof error === 'object') {
|
||||
const err = error as { status?: number; code?: string; message?: string };
|
||||
if (err.status === 401) return true;
|
||||
if (err.code === 'AUTH_ERROR') return true;
|
||||
if (err.message?.includes('회원정보') || err.message?.includes('인증')) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 읽지 않은 이슈 목록 조회 (헤더 알림용)
|
||||
* @param limit 조회할 최대 항목 수 (기본 10)
|
||||
@@ -26,7 +41,18 @@ export async function getUnreadTodayIssues(limit: number = 10): Promise<ApiRespo
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('[TodayIssue] getUnreadTodayIssues error:', error);
|
||||
// 에러 시 빈 응답 반환 (UI에서 처리)
|
||||
|
||||
// 인증 에러인 경우 authError 플래그 설정
|
||||
if (isAuthenticationError(error)) {
|
||||
return {
|
||||
success: false,
|
||||
message: '인증이 만료되었습니다.',
|
||||
data: { items: [], total: 0 },
|
||||
authError: true,
|
||||
};
|
||||
}
|
||||
|
||||
// 일반 에러
|
||||
return {
|
||||
success: false,
|
||||
message: '알림을 불러오는데 실패했습니다.',
|
||||
|
||||
Reference in New Issue
Block a user