const { sendEmailCode } = require('./email') function generateCode() { return Math.floor(100000 + Math.random() * 900000).toString() } async function sendVerificationCode(db, email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!emailRegex.test(email)) { return { success: false, error: '邮箱格式不正确' } } const codesCollection = db.collection('verification_codes') const recentCode = await codesCollection.findOne({ email, created_at: { $gt: new Date(Date.now() - 60000) } }) if (recentCode) { return { success: false, error: '验证码发送太频繁,请稍后再试' } } const code = generateCode() const result = await sendEmailCode(email, code) if (!result.success) { return { success: false, error: '验证码发送失败: ' + result.message } } await codesCollection.deleteMany({ email }) await codesCollection.insertOne({ email, code, created_at: new Date(), expires_at: new Date(Date.now() + 5 * 60 * 1000) }) return { success: true } } async function verifyCode(db, email, code) { const codesCollection = db.collection('verification_codes') const record = await codesCollection.findOne({ email, code, expires_at: { $gt: new Date() } }) if (!record) { return { success: false, error: '验证码无效或已过期' } } await codesCollection.deleteMany({ email }) return { success: true } } module.exports = { sendVerificationCode, verifyCode, generateCode }