diff --git a/src/app/(auth)/signup/applicant/page.tsx b/src/app/(auth)/signup/applicant/page.tsx index 85e32bf4..84941699 100644 --- a/src/app/(auth)/signup/applicant/page.tsx +++ b/src/app/(auth)/signup/applicant/page.tsx @@ -112,14 +112,14 @@ export default function ApplicantSignupPage() { JSON.stringify({ provider: "google", role: "APPLICANT" }) )}`} > - 구글 로그인 + 구글 회원가입 - 카카오 로그인 + 카카오 회원가입 diff --git a/src/app/(auth)/signup/owner/page.tsx b/src/app/(auth)/signup/owner/page.tsx index 0c94e3f1..5840c6c5 100644 --- a/src/app/(auth)/signup/owner/page.tsx +++ b/src/app/(auth)/signup/owner/page.tsx @@ -134,14 +134,14 @@ export default function OwnerSignupPage() { JSON.stringify({ provider: "google", role: "OWNER" }) )}`} > - 구글 로그인 + 구글 회원가입 - 카카오 로그인 + 카카오 회원가입 diff --git a/src/app/api/oauth/callback/google/route.ts b/src/app/api/oauth/callback/google/route.ts index 8a1830c3..3fa90861 100644 --- a/src/app/api/oauth/callback/google/route.ts +++ b/src/app/api/oauth/callback/google/route.ts @@ -49,7 +49,7 @@ export const GET = async (req: NextRequest) => { }, }); - const { access_token, id_token } = tokenResponse.data; + const { id_token } = tokenResponse.data; // id_token 디코딩 const decodedIdToken = decodeJwt(id_token); @@ -84,6 +84,6 @@ export const GET = async (req: NextRequest) => { return response; } catch (error) { console.error("Google login error:", error); - return NextResponse.json({ message: "Internal Server Error" }, { status: 500 }); + return NextResponse.json({ message: "서버에러" }, { status: 500 }); } }; diff --git a/src/app/api/oauth/callback/kakao/route.ts b/src/app/api/oauth/callback/kakao/route.ts index 5b1c65f0..1694d590 100644 --- a/src/app/api/oauth/callback/kakao/route.ts +++ b/src/app/api/oauth/callback/kakao/route.ts @@ -1,5 +1,4 @@ import { NextRequest, NextResponse } from "next/server"; -import axios from "axios"; import { OauthUser } from "@/types/oauth/oauthReq"; import apiClient from "@/lib/apiClient"; @@ -25,8 +24,6 @@ export const GET = async (req: NextRequest) => { } const { provider, role } = parsedState; - const KAKAO_TOKEN_URL = "https://kauth.kakao.com/oauth/token"; - const KAKAO_USER_INFO_URL = "https://kapi.kakao.com/v2/user/me"; const clientId = process.env.NEXT_PUBLIC_KAKAO_REST_API_KEY; const redirectUri = process.env.NEXT_PUBLIC_KAKAO_REDIRECT_URI; @@ -34,63 +31,40 @@ export const GET = async (req: NextRequest) => { return NextResponse.json({ message: "Environment variables not set" }, { status: 500 }); } - const params = new URLSearchParams({ - grant_type: "authorization_code", - client_id: clientId, - redirect_uri: redirectUri, - code: code, - }); + const kakaoUser: OauthUser = { + role: role, + name: "", // 기본값 설정 (빈 문자열) + token: code, // 인가코드 그대로 전달 + redirectUri: redirectUri, + }; try { - // 액세스 토큰 요청 - const tokenResponse = await axios.post(KAKAO_TOKEN_URL, params); - const { access_token } = tokenResponse.data; - - if (!access_token) { - return NextResponse.json({ message: "Failed to retrieve access token" }, { status: 400 }); - } - - // 액세스 토큰을 사용하여 사용자 정보 요청 - const userInfoResponse = await axios.get(KAKAO_USER_INFO_URL, { - headers: { - Authorization: `Bearer ${access_token}`, - }, - }); - - const user = userInfoResponse.data; - - const kakaoUser: OauthUser = { - role: role, - name: user.properties?.nickname, - token: code, // 인가 코드 그대로 사용 - redirectUri: redirectUri, - }; - - try { - const kakaoSignupResponse = await apiClient.post(`/oauth/sign-up/${provider}`, kakaoUser); - console.log("카카오 회원가입 성공:", kakaoSignupResponse.data); - } catch (error) { - const errorMessage = (error as any).response?.data; - console.log("카카오 회원가입 에러", errorMessage); - } + // 인가코드를 포함한 데이터를 백엔드로 전달 + const kakaoSignupResponse = await apiClient.post(`/oauth/sign-up/${provider}`, kakaoUser); + console.log("카카오 회원가입 성공:", kakaoSignupResponse.data); // 사용자 정보를 클라이언트에 반환 - return NextResponse.json(kakaoUser); - } catch (error) { - console.error("Kakao login error:", error); + // return NextResponse.json(kakaoSignupResponse.data); + } catch (error: any) { + // 에러 타입 명시 + console.error("카카오 회원가입 에러:", error.response?.data || error.message); - // Axios 에러인 경우 상세 정보 제공 - if (axios.isAxiosError(error)) { - const { response } = error; - if (response) { - return NextResponse.json( - { message: response.data?.msg || "Error during Kakao API call" }, - { status: response.status || 500 } - ); - } - } + // return NextResponse.json({ message: error.response?.data || "Error during Kakao signup" }, { status: 500 }); + } - // 기타 에러 처리 - return NextResponse.json({ message: "Internal Server Error" }, { status: 500 }); + try { + // 사용자 정보를 클라이언트에 반환 + const response = NextResponse.redirect("http://localhost:3000"); + response.cookies.set("user", JSON.stringify(kakaoUser), { + httpOnly: true, + secure: process.env.NODE_ENV === "production", + sameSite: "strict", + maxAge: 60 * 60 * 24, // 1일 + path: "/", + }); + return response; + } catch (error: any) { + console.error("카카오 회원가입 에러:", error.response?.data || error.message); + return NextResponse.json({ message: error.response?.data || "서버에러" }, { status: 500 }); } };