📜  node express 验证账户链接 api - Javascript (1)

📅  最后修改于: 2023-12-03 15:33:07.928000             🧑  作者: Mango

Node Express 验证账户链接 API

在开发应用程序时,经常需要验证邮箱或手机号等账户,以确保使用者提供的信息是有效和准确的。本文将介绍如何使用 Node.js 和 Express 框架开发一个验证账户链接的 API 接口。

技术栈
  • Node.js
  • Express
  • JSON Web Token(JWT)
  • nodemailer
实现步骤
1. 初始化项目
mkdir node-express-verify-account-link-api
cd node-express-verify-account-link-api

npm init -y
2. 安装依赖
npm install express jwt-simple nodemailer --save
3. 创建路由

创建 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;
4. 创建服务器

创建 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}`);
});
5. 配置环境变量

在项目根目录下创建 .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 密钥和电子邮件服务的用户名和密码。

6. 运行应用程序

运行以下命令启动服务器:

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 发送验证电子邮件。这是一个非常基本的实现,您可以根据您的特定需求进行更改和调整。