diff --git a/umc-master/index.html b/umc-master/index.html
index e76b095..14b710e 100644
--- a/umc-master/index.html
+++ b/umc-master/index.html
@@ -11,7 +11,7 @@
/>
홈마스터
-
+
diff --git a/umc-master/src/pages/auth/KakaoCallback.tsx b/umc-master/src/pages/auth/KakaoCallback.tsx
index ff9e035..918e89d 100644
--- a/umc-master/src/pages/auth/KakaoCallback.tsx
+++ b/umc-master/src/pages/auth/KakaoCallback.tsx
@@ -1,54 +1,42 @@
import React, { useEffect } from 'react';
-import axios from 'axios';
import { useNavigate } from 'react-router-dom';
+import axiosInstance from '@apis/axios-instance';
+import { useTokenStore } from '@store/tokenStore';
+import { useAuthStore } from '@store/authStore';
const KakaoCallback: React.FC = () => {
-
+ const { setAuth } = useAuthStore();
+ const { setTokens } = useTokenStore();
const navigate = useNavigate();
useEffect(() => {
- const getAccessToken = async () => {
- const queryParams = new URLSearchParams(window.location.search);
- const code = queryParams.get('code');
-
- if (!code) {
- console.error('Authorization code not found');
- return;
- }
-
- try {
- // 카카오에서 Access Token 요청
- const response = await axios.post('https://kauth.kakao.com/oauth/token', {
- grant_type: 'authorization_code',
- client_id: import.meta.env.VITE_KAKAO_API_KEY,
- redirect_uri: 'http://localhost:3000/oauth/kakao/callback',
- code,
- });
-
- const kakaoAccessToken = response.data.access_token;
-
- // 백엔드로 카카오 Access Token 전송
- const backendResponse = await axios.post('http://localhost:3000/login/kakao', {
- kakaoAccessToken,
+ const urlParams = new URLSearchParams(window.location.search);
+ const code = urlParams.get('code');
+
+ if (code) {
+ console.log('✅ 카카오 로그인 코드 확인:', code);
+
+ axiosInstance
+ .post('/login/kakao', { code })
+ .then((response) => {
+ const { accessToken, refreshToken } = response.data.result;
+ setTokens({ accessToken, refreshToken });
+ localStorage.setItem('accessToken', accessToken);
+ localStorage.setItem('refreshToken', refreshToken);
+ setAuth(true);
+ navigate('/main');
+ })
+ .catch(() => {
+ // console.error('❌ 카카오 로그인 실패:', error.response?.data || error.message);
+ // alert(error.response?.data?.message || '카카오 로그인에 실패했습니다.');
+ navigate('/');
});
-
- const { accessToken, refreshToken } = backendResponse.data.result;
-
- // Access Token 및 Refresh Token 저장 (예: 로컬 스토리지)
- localStorage.setItem('accessToken', accessToken);
- localStorage.setItem('refreshToken', refreshToken);
-
- // 홈 또는 사용자 대시보드로 이동
- navigate('/');
- } catch (error) {
- console.error('Failed to login with Kakao:', error);
- }
- };
-
- getAccessToken();
+ } else {
+ console.warn('⚠️ 카카오 로그인 코드 없음');
+ }
}, [navigate]);
- return 카카오 로그인 중…
;
+ return <>>;
};
export default KakaoCallback;
diff --git a/umc-master/src/pages/auth/Login_components/InputForm.tsx b/umc-master/src/pages/auth/Login_components/InputForm.tsx
index 2204ddb..5fafebb 100644
--- a/umc-master/src/pages/auth/Login_components/InputForm.tsx
+++ b/umc-master/src/pages/auth/Login_components/InputForm.tsx
@@ -4,7 +4,7 @@ import styled from 'styled-components';
import Input from '@components/Input/Input';
import useInput from '@hooks/useInput';
import { validateEmailFormat, validatePasswordFormat } from '@utils/validation';
-import { useState } from 'react';
+import { useState, useEffect } from 'react';
import Button from '@components/Button/Button';
import Kakao_Image from '@assets/kakao_login/kakao_login_large_wide.png';
import { useNavigate } from 'react-router-dom';
@@ -12,14 +12,49 @@ import axiosInstance from '@apis/axios-instance';
import { useAuthStore } from '@store/authStore';
import { useTokenStore } from '@store/tokenStore';
+const KAKAO_REDIRECT_URI =
+ import.meta.env.MODE === 'development'
+ ? 'http://localhost:5173/oauth/kakao/callback'
+ : 'https://www.hmaster.shop/oauth/kakao/callback';
+
const InputForm: React.FC = () => {
const { setAuth } = useAuthStore();
- const { setTokens } = useTokenStore.getState();
+ const { setTokens } = useTokenStore();
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ if (!window.Kakao) {
+ console.warn('⚠️ window.Kakao가 없음, SDK 로드 시작');
+
+ const script = document.createElement('script');
+ script.src = 'https://developers.kakao.com/sdk/js/kakao.js';
+ script.async = true;
+ script.onload = () => {
+ console.log('✅ 카카오 SDK 로드 완료:', window.Kakao);
+ if (window.Kakao && !window.Kakao.isInitialized()) {
+ console.error('❌ window.Kakao는 있지만 초기화되지 않음! init() 필요');
+ window.Kakao.init(import.meta.env.VITE_JAVASCRIPT_KEY);
+ console.log('✅ 카카오 SDK 강제 초기화 완료');
+ }
+ };
+ document.head.appendChild(script);
+ } else {
+ console.log('✅ window.Kakao 이미 로드됨');
+ if (!window.Kakao.isInitialized()) {
+ console.error('❌ window.Kakao는 있지만 초기화되지 않음! init() 필요');
+ window.Kakao.init(import.meta.env.VITE_JAVASCRIPT_KEY);
+ console.log('✅ 카카오 SDK 강제 초기화 완료');
+ }
+ }
+ }, []);
const handleKakaoLogin = () => {
- const KAKAO_API_KEY = import.meta.env.VITE_KAKAO_API_KEY;
- const kakaoAuthUrl = `https://kauth.kakao.com/oauth/authorize?client_id=${KAKAO_API_KEY}&redirect_uri=http://localhost:3000/oauth/kakao/callback&response_type=code`;
- window.location.href = kakaoAuthUrl;
+ const clientId = import.meta.env.VITE_JAVASCRIPT_KEY;
+ const redirectUri = encodeURIComponent(KAKAO_REDIRECT_URI);
+ const fallbackUrl = `https://kauth.kakao.com/oauth/authorize?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=code`;
+
+ console.log('✅ fallback URL로 리디렉션:', fallbackUrl);
+ window.location.href = fallbackUrl;
};
const handleEmailLogin = async () => {
@@ -72,13 +107,12 @@ const InputForm: React.FC = () => {
e.preventDefault();
setIsSubmitted(true);
- // 이메일 및 비밀번호가 비어있는지 체크하고 오류 메시지 표시
if (!email) {
handleEmailError('이메일을 입력해주세요.');
} else {
const emailError = validateEmailFormat(email);
if (emailError) {
- handleEmailError(emailError); // 이메일 오류 처리
+ handleEmailError(emailError);
}
}
@@ -87,7 +121,7 @@ const InputForm: React.FC = () => {
} else {
const passwordError = validatePasswordFormat(password);
if (passwordError) {
- handlePasswordError(passwordError); // 비밀번호 오류 처리
+ handlePasswordError(passwordError);
}
}
@@ -110,8 +144,6 @@ const InputForm: React.FC = () => {
await handleEmailLogin();
};
- const navigate = useNavigate(); // 추가
-
return (
@@ -132,7 +164,7 @@ const InputForm: React.FC = () => {
-