Fix: 피드백 반영 수정

This commit is contained in:
정현조 2024-09-13 12:25:00 +09:00
parent 5edfe33564
commit 2ec98c0ece
5 changed files with 26 additions and 31 deletions

View File

@ -30,9 +30,9 @@ const processQueue = (error: Error | null, token: string | undefined = undefined
}; };
api.interceptors.request.use((config: InternalAxiosRequestConfig) => { api.interceptors.request.use((config: InternalAxiosRequestConfig) => {
const token = sessionStorage.getItem('accessToken'); const accessToken = useAuthStore.getState().accessToken;
if (token && config.headers) { if (accessToken && config.headers) {
config.headers.Authorization = `Bearer ${token}`; config.headers.Authorization = `Bearer ${accessToken}`;
} }
return config; return config;
}); });
@ -72,13 +72,12 @@ api.interceptors.response.use(
} }
useAuthStore.getState().setLoggedIn(true, newAccessToken); useAuthStore.getState().setLoggedIn(true, newAccessToken);
sessionStorage.setItem('accessToken', newAccessToken);
processQueue(null, newAccessToken); processQueue(null, newAccessToken);
if (originalRequest.headers) { const redirectUri = `/redirect/oauth2?accessToken=${newAccessToken}`;
originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; window.location.href = redirectUri;
}
return api(originalRequest); return Promise.reject(new Error('Redirecting to retrieve cookies'));
} catch (reissueError: unknown) { } catch (reissueError: unknown) {
processQueue(reissueError as Error, undefined); processQueue(reissueError as Error, undefined);
console.error('토큰 재발급 실패:', reissueError); console.error('토큰 재발급 실패:', reissueError);

View File

@ -11,25 +11,22 @@ const DOMAIN = 'https://j11s002.p.ssafy.io';
export default function Home() { export default function Home() {
const navigate = useNavigate(); const navigate = useNavigate();
const { isLoggedIn, setLoggedIn, profile, setProfile } = useAuthStore(); const { isLoggedIn, accessToken, setLoggedIn, profile, setProfile } = useAuthStore();
const hasFetchedProfile = useRef(false); const hasFetchedProfile = useRef(false);
if (!isLoggedIn && !profile && !hasFetchedProfile.current) { if (!isLoggedIn && !profile && !hasFetchedProfile.current && accessToken) {
const accessToken = sessionStorage.getItem('accessToken'); setLoggedIn(true, accessToken);
if (accessToken) { fetchProfileApi()
setLoggedIn(true, accessToken); .then((data: SuccessResponse<MemberResponseDTO>) => {
fetchProfileApi() if (data?.isSuccess && data.data) {
.then((data: SuccessResponse<MemberResponseDTO>) => { setProfile(data.data);
if (data?.isSuccess && data.data) { hasFetchedProfile.current = true;
setProfile(data.data); }
hasFetchedProfile.current = true; })
} .catch((error: AxiosError<CustomError>) => {
}) alert('프로필을 가져오는 중 오류가 발생했습니다. 다시 시도해주세요.');
.catch((error: AxiosError<CustomError>) => { console.error('프로필 가져오기 실패:', error?.response?.data?.message || '알 수 없는 오류');
alert('프로필을 가져오는 중 오류가 발생했습니다. 다시 시도해주세요.'); });
console.error('프로필 가져오기 실패:', error?.response?.data?.message || '알 수 없는 오류');
});
}
} }
const handleGoogleSignIn = () => { const handleGoogleSignIn = () => {

View File

@ -6,6 +6,7 @@ import { fetchProfileApi } from '@/api/authApi';
export default function OAuthCallback() { export default function OAuthCallback() {
const navigate = useNavigate(); const navigate = useNavigate();
const setLoggedIn = useAuthStore((state) => state.setLoggedIn); const setLoggedIn = useAuthStore((state) => state.setLoggedIn);
const setProfile = useAuthStore((state) => state.setProfile);
useEffect(() => { useEffect(() => {
const queryParams = new URLSearchParams(window.location.search); const queryParams = new URLSearchParams(window.location.search);
@ -13,7 +14,6 @@ export default function OAuthCallback() {
if (accessToken) { if (accessToken) {
setLoggedIn(true, accessToken); setLoggedIn(true, accessToken);
sessionStorage.setItem('accessToken', accessToken);
fetchProfileApi() fetchProfileApi()
.then((data) => { .then((data) => {
@ -23,7 +23,7 @@ export default function OAuthCallback() {
nickname: data.data.nickname, nickname: data.data.nickname,
profileImage: data.data.profileImage, profileImage: data.data.profileImage,
}; };
useAuthStore.getState().setProfile(profileData); setProfile(profileData);
navigate('/browse'); navigate('/browse');
} else { } else {
throw new Error('프로필 데이터를 가져올 수 없습니다.'); throw new Error('프로필 데이터를 가져올 수 없습니다.');
@ -37,7 +37,7 @@ export default function OAuthCallback() {
} else { } else {
navigate('/'); navigate('/');
} }
}, [navigate, setLoggedIn]); }, [navigate, setLoggedIn, setProfile]);
return <p> ...</p>; return <p> ...</p>;
} }

View File

@ -17,7 +17,7 @@ export const webPath = {
workspace: () => '/workspace', workspace: () => '/workspace',
// workspace: (workspaceId: string, projectId?: string) => // workspace: (workspaceId: string, projectId?: string) =>
// projectId ? `/workspace/${workspaceId}/project/${projectId}` : `/workspace/${workspaceId}`, // projectId ? `/workspace/${workspaceId}/project/${projectId}` : `/workspace/${workspaceId}`,
admin: (workspaceId: string) => `/admin/${workspaceId}`, admin: () => `/admin`,
oauthCallback: () => '/redirect/oauth2', oauthCallback: () => '/redirect/oauth2',
}; };
@ -61,7 +61,7 @@ const router = createBrowserRouter([
], ],
}, },
{ {
path: webPath.admin(':workspaceId'), path: `${webPath.admin()}/:workspaceId`,
element: <AdminLayout />, element: <AdminLayout />,
children: [ children: [
{ {

View File

@ -23,7 +23,6 @@ const useAuthStore = create<AuthState>()(
}), }),
{ {
name: 'auth-storage', name: 'auth-storage',
getStorage: () => sessionStorage,
} }
) )
); );