feat: 인증 처리 로직 수정

This commit is contained in:
2025-03-14 11:27:10 +09:00
parent f541687c00
commit 4c441a9c28
3 changed files with 23 additions and 24 deletions
@@ -31,7 +31,7 @@ export class LoginApiService implements LoginService {
const tokenId = data[AUTH_USER_ID];
if (!accessToken || !tokenId) {
throw new Error("[login] Missing required authentication tokens");
throw new Error("Missing required authentication tokens");
}
tokenManager.setToken(CLAIM_NAME, accessToken);
@@ -42,11 +42,9 @@ export class LoginApiService implements LoginService {
);
} catch (error) {
if (error instanceof AxiosError) {
throw new Error(
`Login failed: ${error.response?.data?.message || error.message}`,
);
throw new Error(`Login failed: ${error.response?.data?.message}`);
}
throw error;
throw new Error(`Login failed: ${error}`);
}
}
@@ -62,22 +60,19 @@ export class LoginApiService implements LoginService {
const tokenId = data[AUTH_USER_ID];
if (!accessToken || !tokenId) {
throw new Error(
"[silentRefresh] Missing required authentication tokens",
);
throw new Error("Missing required authentication tokens");
}
tokenManager.setToken(CLAIM_NAME, accessToken);
tokenManager.setToken(AUTH_USER_ID, tokenId);
} catch (error) {
console.warn("Token has expired, logging out.");
tokenManager.clearAuthToken();
if (error instanceof AxiosError) {
throw new Error(
`Silent refresh failed: ${error.response?.data?.message || error.message}`,
`Silent refresh failed: ${error.response?.data?.message}`,
);
}
throw error;
throw new Error(`Silent refresh failed: ${error}`);
}
}
}
+10 -6
View File
@@ -1,12 +1,12 @@
"use client";
import { useRouter } from "next/navigation";
import { useQuery } from "@tanstack/react-query";
import { createContext, useContext, useState } from "react";
import { client } from "../api/client";
import { ENDPOINT } from "../config/api";
import { AUTH_USER_ID } from "../config/env";
import { getCookie } from "../lib/cookie";
import { AxiosError } from "axios";
import { LoginApi } from "@/entities/auth/login";
interface IUserInfo {
@@ -50,28 +50,32 @@ export interface AuthContextType {
export const AuthContext = createContext<AuthContextType | null>(null);
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const router = useRouter();
const [userInfo, setUserInfo] = useState<IUserInfo | null>(null);
useQuery({
queryKey: [ENDPOINT.USER_SERVICE.USERS],
queryFn: async () => {
try {
const userId = getCookie(AUTH_USER_ID);
if (!userId) {
throw new Error("Missing required authentication tokens");
}
const response = await client.get<IUserInfo>(
`${ENDPOINT.USER_SERVICE.USERS}/${getCookie(AUTH_USER_ID)}`,
`${ENDPOINT.USER_SERVICE.USERS}/${userId}`,
);
setUserInfo(response.data);
return response;
} catch (error) {
console.error(error);
if (error instanceof AxiosError) {
if (error.response?.status === 401) {
try {
await LoginApi.silentRefresh();
} catch (refreshError) {
console.error("Token refresh failed:", refreshError);
setUserInfo(null);
}
}
router.push("/auth/login");
}
}
},
+2 -2
View File
@@ -28,12 +28,12 @@ class Client {
if (!token || !userId) {
throw new AxiosError(
"[Client] Missing required authentication tokens",
"The authentication token is invalid.",
"UNAUTHORIZED",
config,
null,
{
data: { message: "Missing required authentication tokens" },
data: { message: "The authentication token is invalid." },
status: 401,
statusText: "Unauthorized",
headers: this.axiosInstance.defaults.headers,