import { supabase } from "@/api/supabase";
// 카카오 로그인
export const signInWithKakao = async () => {
try {
const { error } = await supabase.auth.signInWithOAuth({
provider: "kakao",
options: {
redirectTo: "http://localhost:3000/home", // 리다이렉션
queryParams: {
prompt: "select_account"
}
}
});
if (error) {
alert("로그인 중에 에러가 발생했습니다.");
console.error("로그인 에러 => ", error);
throw error;
}
} catch (error) {
alert("카카오 로그인 에러 발생 => " + error);
console.error("카카오 로그인 에러 발생 => ", error);
}
};
// 구글 로그인
export const signInWithGoogle = async () => {
try {
const { error } = await supabase.auth.signInWithOAuth({
provider: "google",
options: {
redirectTo: "http://localhost:3000/home", // 리다이렉션
queryParams: {
access_type: "offline", // refresh token
prompt: "select_account" // 사용자에게 동의를 구하는 prompt 표시
}
}
});
if (error) {
alert("로그인 중에 에러가 발생했습니다.");
console.error("로그인 에러 => ", error);
throw error;
}
} catch (error) {
alert("구글 로그인 에러 발생 => " + error);
console.error("구글 로그인 에러 발생 => ", error);
}
};
"use client";
import React from "react";
import KakaoLogo from "@/assets/icons/logo/Kakao.svg";
import { signInWithKakao } from "@/hooks/useSocialLogin";
const KakaoLogin = () => {
return (
<div
className="flex w-full h-[50px] px-5 items-center bg-kakao rounded-lg cursor-pointer"
onClick={signInWithKakao}
>
<figure>
<KakaoLogo />
</figure>
<nav className="flex w-full justify-center medium-14">
카카오로 계속하기
</nav>
</div>
);
};
export default KakaoLogin;
export default function LoginPageLayout({
children
}: Readonly<{
children: React.ReactNode;
}>) {
return <main className="h-full px-4 py-16 bg-orange">{children}</main>;
}
@svgr/webpack
라이브러리 사용// next.config.mjs
webpack: (config) => {
config.module.rules.push({
test: /\.svg$/,
use: ["@svgr/webpack"]
});
return config;
}
import KakaoLogo from "@/assets/icons/logo/Kakao.svg";
const KakaoLogin = () => {
return (
// 중략
<KakaoLogo />
);
};
Next.js에서 Route group을 설정하는 방법
: 소괄호()로 그룹을 구분함
// 로그인 페이지에 속하는 route group
src/app/(loginLayout)/login/layout.tsx
// 로그인 페이지에 속하지 않는 route group
src/app/(nonLoginLayout)/nonlogin/layout.tsx
새로운 것을 학습하는 건 언제나 쉽지 않다. 하지만 문제를 해결하기 위해 하나하나 찾아보고, 학습하고, 적용해서 결과물이 해결되는 것을 보는 쾌감은 너무 재밌다.
아직은 할 일이 많지만 차근차근 해보자.