Skip to content
Merged

Dev #410

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/controllers/authController.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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) {
Expand Down
20 changes: 20 additions & 0 deletions src/utils/emailValidator.js
Original file line number Diff line number Diff line change
@@ -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 };