fix: SSAFY OAuth 로그인 수정 및 API 클라이언트 안정성 개선 (8건)
- 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:
@@ -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 }),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user