1. κ΄λ¦¬μ νμκ°μ
API
- μ΄λ² ν¬μ€ν
μμλ κ΄λ¦¬μ νμκ°μ
API κΈ°λ₯μ ꡬνν¨.
- μ΄λ μ½λλ₯Ό μ¬μ©ν΄ νΉμ μ¬μ©μκ° κ΄λ¦¬μ κΆνμ κ°μ§κ³ κ°μ
ν μ μλλ‘ νμΌλ©°, κ°μ
μ μ΄λ©μΌ μΈμ¦ κΈ°λ₯λ ν¨κ» μ 곡λ¨.
1) κ΄λ¦¬μ νμκ°μ
API μ€μ (adminSignup.js)
- adminSignup.js νμΌμμλ μ΄λ μ½λκ° μ¬λ°λ₯Έ κ²½μ°μλ§ κ΄λ¦¬μλ‘ νμκ°μ
μ΄ μ§νλλλ‘ νλ κΈ°λ₯μ ꡬννμ
- λν μ΄λ©μΌ μΈμ¦ μ μ°¨λ₯Ό ν¬ν¨ν΄, μΈμ¦ μ½λκ° ν¬ν¨λ μ΄λ©μΌμ μ¬μ©μκ° μμ νλλ‘ νμ(κΈ°μ‘΄μ νμκ°μ
κ³Ό λμΌ)
const express = require("express");
const router = express.Router();
const { User } = require("../../models/User");
const crypto = require("crypto");
const { sendVerificationEmail } = require("../../utils/sendEmail");
const ADMIN_INVITE_CODE = process.env.ADMIN_INVITE_CODE; // νκ²½λ³μλ‘ λΆλ¬μ€κΈ°
router.use(express.json());
// νμκ°μ
μ²λ¦¬ λ° μ΄λ©μΌ μΈμ¦ μ½λ λ°μ‘
router.post("/", async (req, res) => {
const { email, inviteCode } = req.body;
try {
// console.log("Received inviteCode:", inviteCode);
// μ΄λ μ½λ κ²μ¦
if (inviteCode !== ADMIN_INVITE_CODE) {
return res.status(400).json({
success: false,
message: "μλͺ»λ μ΄λ μ½λμ
λλ€. κ΄λ¦¬μ μ΄λ μ½λκ° νμν©λλ€.",
});
}
// μ΄λ μ½λκ° λ§μΌλ©΄ κ΄λ¦¬μ κΆν λΆμ¬
const role = inviteCode === ADMIN_INVITE_CODE ? "admin" : "user";
const existingUser = await User.findOne({ email });
if (existingUser) {
if (existingUser.isEmailVerified) {
return res
.status(400)
.json({ success: false, message: "μ΄λ―Έ κ°μ
λ μ¬μ©μμ
λλ€." });
}
const emailVerificationCode = crypto.randomBytes(3).toString("hex");
existingUser.emailVerificationCode = emailVerificationCode;
existingUser.emailVerificationCodeExpires = Date.now() + 300000;
const emailSent = await sendVerificationEmail(
email,
emailVerificationCode
);
if (!emailSent) {
return res
.status(500)
.json({ success: false, message: "μ΄λ©μΌ μ μ‘ μ€ν¨" });
}
await existingUser.save();
return res
.status(200)
.json({ success: true, message: "μΈμ¦μ½λκ° μ¬μ μ‘λμμ΅λλ€." });
}
const emailVerificationCode = crypto.randomBytes(3).toString("hex");
const user = new User({
...req.body,
role, // μ€μ λ μν μ μ₯
emailVerificationCode,
emailVerificationCodeExpires: Date.now() + 300000,
});
console.log("Role:", role); // μν μ΄ μ λλ‘ μ€μ λλμ§ νμΈ
const emailSent = await sendVerificationEmail(email, emailVerificationCode);
if (!emailSent) {
return res
.status(500)
.json({ success: false, message: "μ΄λ©μΌ μ μ‘ μ€ν¨" });
}
await user.save(); // μ¬μ©μ μ 보 μ μ₯
res.status(200).json({ success: true, message: "μ΄λ©μΌ μ μ‘ μ±κ³΅" });
} catch (err) {
res.status(500).json({ success: false, err });
}
});
// μ΄λ©μΌ μΈμ¦ μ²λ¦¬
...
module.exports = router;
2) User μ€ν€λ§ μμ (User.js)
- User μ€ν€λ§μ role νλλ₯Ό μΆκ°νμ¬, μ¬μ©μκ° μΌλ° μ¬μ©μ(user)μΈμ§ κ΄λ¦¬μ(admin)μΈμ§ ꡬλΆ
- κΈ°λ³Έκ°μ userλ‘ μ€μ .
// User.js
role: {
type: String, // λ¬Έμμ΄λ‘ λ³κ²½
enum: ["user", "admin"], // κ°λ₯ν κ° μ€μ
default: "user", // κΈ°λ³Έκ°: μΌλ° μ¬μ©μ
},
2. κ²°κ³Ό π