diff --git a/src/controllers/authController.js b/src/controllers/authController.js index 53874625..ce696ea9 100644 --- a/src/controllers/authController.js +++ b/src/controllers/authController.js @@ -8,6 +8,7 @@ const { v4: uuidv4 } = require("uuid"); // ✅ UUID 생성 모듈 추가 const { jwtSecret } = require("../config/authConfig"); const { verifyGoogleIdToken } = require("../utils/googleTokenVerifier"); const { parseResidentNumber, formatPhoneNumber } = require("../utils/registrationUtils"); +const { isUniversityEmail } = require("../utils/emailValidator"); const supabase = require("../config/supabase"); exports.register = async (req, res) => { @@ -43,6 +44,13 @@ exports.register = async (req, res) => { return res.status(400).json({ error: "❌ 이메일과 비밀번호를 입력해주세요." }); } + // 대학교 이메일 도메인 검증 + if (!isUniversityEmail(userEmail)) { + return res.status(400).json({ + error: "❌ 대학교 이메일만 사용 가능합니다. (.ac.kr 또는 .edu)" + }); + } + // Supabase 학교 이메일 인증 검증 (이메일 인증 시) if (isEmailVerified && supabaseAccessToken) { if (!supabase) { diff --git a/src/utils/emailValidator.js b/src/utils/emailValidator.js new file mode 100644 index 00000000..34f075d1 --- /dev/null +++ b/src/utils/emailValidator.js @@ -0,0 +1,20 @@ +/** + * 대학교 이메일 도메인 검증 유틸리티 + */ + +const ALLOWED_DOMAIN_SUFFIXES = ['.ac.kr', '.edu']; + +/** + * 대학교 이메일인지 검증 + * @param {string} email - 검증할 이메일 주소 + * @returns {boolean} 대학교 이메일 여부 + */ +const isUniversityEmail = (email) => { + if (!email || typeof email !== 'string' || !email.includes('@')) { + return false; + } + const domain = email.split('@')[1].toLowerCase(); + return ALLOWED_DOMAIN_SUFFIXES.some(suffix => domain.endsWith(suffix)); +}; + +module.exports = { isUniversityEmail, ALLOWED_DOMAIN_SUFFIXES };