📅  最后修改于: 2023-12-03 15:33:07.928000             🧑  作者: Mango
在开发应用程序时,经常需要验证邮箱或手机号等账户,以确保使用者提供的信息是有效和准确的。本文将介绍如何使用 Node.js 和 Express 框架开发一个验证账户链接的 API 接口。
mkdir node-express-verify-account-link-api
cd node-express-verify-account-link-api
npm init -y
npm install express jwt-simple nodemailer --save
创建 routes/index.js
文件,并添加如下代码:
const express = require('express');
const jwt = require('jwt-simple');
const nodemailer = require('nodemailer');
const router = express.Router();
// 数据库模拟用户信息
const users = [
{
username: 'test',
email: 'test@example.com',
password: '123456',
},
];
// 发送验证邮件
const sendVerificationEmail = (toEmail, token) => {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL_USER, // replace with your email user
pass: process.env.EMAIL_PASS, // replace with your email password
},
});
const mailOptions = {
from: process.env.EMAIL_USER,
to: toEmail,
subject: 'Verify your account email address',
html: `<p>Please click the following link to verify your account email address:</p>
<p><a href="${process.env.CLIENT_URL}/verify-email?token=${token}">Verify Email</a></p>
<p>If you did not request this, please ignore this email.</p>`,
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error(error);
} else {
console.log(`Email sent: ${info.response}`);
}
});
};
// 账户验证 API
router.post('/verify-account', (req, res) => {
const { email } = req.body;
const user = users.find((u) => u.email === email);
if (!user) {
return res.sendStatus(404);
}
try {
// 生成 JWT 令牌
const token = jwt.encode(
{ sub: user.email, iat: Date.now() },
process.env.JWT_SECRET
);
// 发送验证邮件
sendVerificationEmail(email, token);
res.sendStatus(200);
} catch (error) {
console.error(error);
res.sendStatus(500);
}
});
module.exports = router;
创建 server.js
文件,并添加如下代码:
const express = require('express');
const dotenv = require('dotenv');
const cors = require('cors');
const app = express();
const port = process.env.PORT || 5000;
dotenv.config();
// 中间件
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 路由
app.use('/', require('./routes/index'));
// 监听端口
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
在项目根目录下创建 .env
文件,并添加如下代码:
PORT=5000
CLIENT_URL=http://localhost:3000
JWT_SECRET=your_secret_key
EMAIL_USER=your_email_user
EMAIL_PASS=your_email_password
在 .env
文件中配置了应用程序的端口、客户端 URL、JWT 密钥和电子邮件服务的用户名和密码。
运行以下命令启动服务器:
node server.js
现在,您可以使用 Postman 或其他 HTTP 客户端测试 API,发送 POST 请求到 http://localhost:5000/verify-account
,并在请求正文中添加以下 JSON 格式数据:
{
"email": "test@example.com"
}
这将向具有给定电子邮件地址的用户发送验证电子邮件。邮件将包含一个链接,用户可以单击链接来验证他们的帐户。
在本文中,我们使用 Node.js 和 Express 框架开发了一个验证账户链接的 API。我们使用 JSON Web Token(JWT)生成令牌,并使用 nodemailer 发送验证电子邮件。这是一个非常基本的实现,您可以根据您的特定需求进行更改和调整。