fix: SSAFY OAuth 로그인 수정 및 API 클라이언트 안정성 개선 (8건)
Some checks failed
Client CI/CD / test (push) Waiting to run
Client CI/CD / deploy (push) Has been cancelled

- SSAFY OAuth state 파라미터 전달 추가 (로그인 불능 해결)
- POST/PUT/DELETE 5xx 및 네트워크 에러 재시도 방지 (멱등 요청만 재시도)
- UserAdmin 페이지네이션 추가 (offset/limit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-18 23:26:40 +09:00
parent ae013acd2d
commit 4e3a01428a
5 changed files with 31 additions and 13 deletions

View File

@@ -22,10 +22,10 @@ export async function getSSAFYLoginURL() {
return apiFetch('/api/auth/ssafy/login');
}
export async function ssafyCallback(code) {
export async function ssafyCallback(code, state) {
return apiFetch('/api/auth/ssafy/callback', {
method: 'POST',
body: JSON.stringify({ code }),
body: JSON.stringify({ code, state }),
});
}

View File

@@ -76,11 +76,14 @@ export async function apiFetch(path, options = {}, _retryCount = 0) {
const token = localStorage.getItem('token');
let res;
const method = (options.method || 'GET').toUpperCase();
const isIdempotent = method === 'GET' || method === 'HEAD';
try {
res = await doFetch(path, options, token);
} catch (e) {
// 네트워크 에러 (오프라인 등) — 재시도
if (_retryCount < 2) {
// 네트워크 에러 (오프라인 등) — 멱등 요청만 재시도
if (isIdempotent && _retryCount < 2) {
await delay(1000 * (_retryCount + 1));
return apiFetch(path, options, _retryCount + 1);
}
@@ -111,8 +114,8 @@ export async function apiFetch(path, options = {}, _retryCount = 0) {
}
}
// 5xx 서버 에러 — 최대 2회 재시도 (exponential backoff)
if (res.status >= 500 && _retryCount < 2) {
// 5xx 서버 에러 — 멱등 요청만 최대 2회 재시도 (exponential backoff)
if (res.status >= 500 && isIdempotent && _retryCount < 2) {
await delay(1000 * (_retryCount + 1));
return apiFetch(path, options, _retryCount + 1);
}

View File

@@ -1,7 +1,7 @@
import { apiFetch } from './client';
export function getUsers() {
return apiFetch('/api/users');
export function getUsers(offset = 0, limit = 20) {
return apiFetch(`/api/users?offset=${offset}&limit=${limit}`);
}
export function updateUserRole(id, role) {