豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: 邮箱验证源码开发

🤖 Ai回答:
邮箱验证源码开发指南

1、整体架构设计

前端部分
javascript
// HTML表单
<form id=emailForm
<input type=email id=email placeholder=请输入邮箱地址 required
<button type=submit发送验证邮件</button
</form

<div id=verificationCodeSection style=display:none;
<input type=text id=code placeholder=请输入验证码 required
<button type=submit id=verifyBtn验证</button
</div

后端API设计

POST /api/send-verification-email 发送验证邮件
POST /api/verify-email 验证邮箱
GET /api/check-verification-status 检查验证状态

2、核心代码实现

Node.js + Express后端实现

javascript
const express = require('express');
const nodemailer = require('nodemailer');
const crypto = require('crypto');
const redis = require('redis');

const app = express();
app.use(express.json());

// Redis连接
const client = redis.createClient();

// 配置邮件服务
const transporter = nodemailer.createTransporter({
host: 'smtp.gmail.com',
port: 587,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS
}
});

// 发送验证邮件
app.post('/api/send-verification-email', async (req, res) = {
const { email } = req.body;

// 输入验证
if (!email !isValidEmail(email)) {
return res.status(400).json({ error: '无效的邮箱地址' });
}

try {
// 生成唯一验证码
const verificationCode = crypto.randomBytes(3).toString('hex').toUpperCase();

// 存储到Redis(设置过期时间,例如10分钟)
await client.setex(`email:${email}:code`, 600, verificationCode);

// 发送邮件
const mailOptions = {
from: 'noreply@yourdomain.com',
to: email,
subject: '邮箱验证',
html: `
<h2邮箱验证</h2
<p您的验证码是:<strong${verificationCode}</strong</p
<p此验证码将在10分钟后过期。</p
`
};

await transporter.sendMail(mailOptions);

res.json({ success: true, message: '验证邮件已发送,请检查邮箱' });
} catch (error) {
console.error('发送邮件失败:', error);
res.status(500).json({ error: '发送邮件失败,请稍后再试' });
}
});

// 验证邮箱
app.post('/api/verify-email', async (req, res) = {
const { email, code } = req.body;

try {
// 获取存储的验证码
const storedCode = await client.get(`email:${email}:code`);

if (!storedCode) {
return res.status(400).json({ error: '验证码已过期或不存在' });
}

if (storedCode !== code) {
return res.status(400).json({ error: '验证码错误' });
}

// 验证成功,删除验证码
await client.del(`email:${email}:code`);

// 可以在这里更新用户数据库中的邮箱验证状态
// updateUserEmailVerified(email, true);

res.json({ success: true, message: '邮箱验证成功' });
} catch (error) {
console.error('验证失败:', error);
res.status(500).json({ error: '验证失败,请稍后再试' });
}
});

// 检查验证状态
app.get('/api/check-verification-status/:email', async (req, res) = {
try {
const { email } = req.params;
const storedCode = await client.get(`email:${email}:code`);

if (storedCode) {
res.json({ verified: false, message: '需要验证' });
} else {
res.json({ verified: true, message: '已验证' });
}
} catch (error) {
console.error('检查状态失败:', error);
res.status(500).json({ error: '检查失败' });
}
});

function isValidEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(email);
}

app.listen(3000, () = {
console.log('服务器运行在端口 3000');
});

前端JavaScript实现

javascript
class EmailVerification {
constructor() {
this.emailInput = document.getElementById('email');
this.codeInput = document.getElementById('code');
this.verifyBtn = document.getElementById('verifyBtn');
this.form = document.getElementById('emailForm');

this.initEventListeners();
}

initEventListeners() {
this.form.addEventListener('submit', (e) = {
e.preventDefault();
this.sendVerificationEmail();
});

this.verifyBtn.addEventListener('click', () = {
this.verifyEmail();
});
}

async sendVerificationEmail() {
const email = this.emailInput.value;

try {
const response = await fetch('/api/send-verification-email', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email })
});

const data = await response.json();

if (response.ok) {
alert(data.message);
this.showVerificationSection();
} else {
alert('发送失败: ' + data.error);
}
} catch (error) {
console.error('发送邮件出错:', error);
alert('网络错误,请重试');
}
}

async verifyEmail() {
const email = this.emailInput.value;
const code = this.codeInput.value;

try {
const response = await fetch('/api/verify-email', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email, code })
});

const data = await response.json();

if (response.ok) {
alert(data.message);
this.hideVerificationSection();
// 这里可以添加跳转或其他逻辑
} else {
alert('验证失败: ' + data.error);
}
} catch (error) {
console.error('验证出错:', error);
alert('网络错误,请重试');
}
}

showVerificationSection() {
document.getElementById('verificationCodeSection').style.display = 'block';
}

hideVerificationSection() {
document.getElementById('verificationCodeSection').style.display = 'none';
}
}

// 初始化
document.addEventListener('DOMContentLoaded', () = {
new EmailVerification();
});

3、安全性考虑

数据库设计建议
sql
用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) UNIQUE NOT NULL,
email_verified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

验证记录表(可选,用于审计)
CREATE TABLE email_verification_logs (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
verification_code VARCHAR(10) NOT NULL,
is_used BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL
);

安全措施
1、验证码限制:每个邮箱每天最多发送3次验证邮件
2、IP限制:同一IP短时间内多次请求限流
3、验证码加密:使用强随机数生成验证码
4、HTTPS:确保所有通信都通过HTTPS
5、输入验证:严格验证邮箱格式和验证码长度
6、日志记录:记录验证尝试,便于安全审计

4、部署配置

.env文件

EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
REDIS_URL=redis://localhost:6379
NODE_ENV=production
PORT=3000

Docker部署(可选)
dockerfile
FROM node:16-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY 、.

EXPOSE 3000

CMD [node, server.js]

5、测试用例

javascript
// 单元测试示例(使用Jest)
describe('Email Verification', () = {
test('should send verification email successfully', async () = {
const response = await request(app)
.post('/api/send-verification-email')
.send({ email: 'test@65.hk' });

expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
});

test('should fail with invalid email', async () = {
const response = await request(app)
.post('/api/send-verification-email')
.send({ email: 'invalid-email' });

expect(response.status).toBe(400);
});
});

这个邮箱验证系统提供了完整的功能:
✅ 邮箱格式验证
✅ 验证码生成与存储
✅ 邮件发送功能
✅ 验证码验证
✅ 状态检查
✅ 安全防护机制

可以根据具体需求调整参数和功能!

Ai作答

📣 商家广告


求名

高防vps

贵阳用友软件

算命

月饼


0

IP地址: 130.4.142.188

搜索次数: 0

提问时间: 2025-11-03 21:44:12

🛒 域名购买
84.gs
kingwarchina.com
43.gold
83.gs
797.net.cn
wenchangji.cn
ty.gs
822.net.cn
53.biz
279.net.cn

❓️ 热门提问
云计算岗位调研
45vps
酒店预订源码定制
现在的香港
gov.tl域名
用海外服务器
php环境搭建软件
服务器网络机房
云空间建站
学生机 vps
豌豆Ai站群搜索引擎系统

🌐 域名评估
vtol.hl.cn
ww.fj.cn
vzji.cn
vivo.gd.cn
ee.mo.cn
ii.gs.cn
musk.rent
xedq.cn
si.hn.cn
vance.ren

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
搜站网  Sökmotor for barn  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 56626 56627 56628 下一篇