✨ 기억보다 기록을/프로젝트
20241113(수) ▶️ 이메일 회원가입시 랜덤 닉네임 부여해서 적용하기
서카츄
2024. 11. 13. 06:22
소셜 로그인을 구현했을시 닉네임을 받아오게 설정했는데,
일반 이메일로 회원가입 할때는 최소한의 빠른 회원가입을 위해서
이메일과 패스워드만 받고, 닉네임은 일단 우선으로 랜덤으로 닉네임을 부여하기로 생각했다.
//랜덤 닉네임 api 불러오기
import axios from "axios";
const SERVER_URL = process.env.NEXT_PUBLIC_RANDOM_NICKNAME_URL;
const getRandomNickname = async () => {
try {
const { data } = await axios.post(SERVER_URL!, {
lang: "ko",
});
return data;
} catch (error) {
if (error instanceof Error) {
console.log("Error nickname", error.message);
}
}
};
export default getRandomNickname;
한글 랜덤닉네임을 부여하는 api를 찾아서 api를 먼저 가져왔다.
수파베이스 일반 이메일 회원가입
//일반 회원가입
export const signUpEmail = async (email: string, password: string) => {
try {
const nickname = await getRandomNickname();
const { data, error } = await supabase.auth.signUp({
email,
password,
options: {
data: {
name: nickname.data,
},
},
});
if (error) throw error;
return data;
} catch (error) {
if (error instanceof Error) {
throw new Error(`회원가입에 실패했습니다. ${error.message}`);
}
}
};
그리고 일반 이메일 회원가입시 사용하는 함수에서 nickname 데이터를 받아서
Supabase 회원가입 구조에 맞게 데이터를 전송해준다.
email, // 필수: 이메일
password, // 필수: 비밀번호
options: { // 선택: 추가 옵션들
data: { // 사용자 메타데이터
name: nickname.data // 닉네임 저장
}
}
회원가입 닉네임 처리를 signUpEmail 함수에 해줬으니
handleSubmit함수는 간단하게 사용자가 입력한 값, 이메일과 패스워드만 받아서 전달해주면 된다 😊
//일반 이메일 회원가입 버튼
const handleSubmit = async (data: SignUpType) => {
try {
await signUpEmail(data.email, data.password);
toast({
title: "회원가입이 완료되었습니다!",
});
push("/login");
} catch (error) {
if (error instanceof Error) {
toast({
title: error.message,
});
}
}
};
가입을 완료하면 이렇게 랜덤으로 부여된 닉네임을 확인할 수 있다😊