Node.js 邮箱验证
Node.js 邮箱验证
邮箱验证是Web开发中常见的需求,用于确保用户提供的邮箱地址有效。本文将详细介绍如何在Node.js环境中实现邮箱验证功能,包括使用jsonwebtoken生成验证令牌、nodemailer发送验证邮件,以及如何在Express服务器中处理验证请求。
邮箱验证是Node.js中的一种技术,用于确保所提供的电子邮件是否对应于现有的用户,否则数据库将填满不必要的用户。这个过程是这样的,我们向电子邮件发送某种令牌,用户发送带有该令牌的get请求,现在如果服务器先前发送的令牌与get请求中的令牌完全一致,则将认为邮箱已经验证。
前提条件:nodemailer, jwt, node和express的基本工作。
步骤1:创建一个node项目并初始化代码并安装
npm init // To initialize the package
npm install jsonwebtoken // To generate token
npm install express // To create server
npm install nodemailer // To send email
安装完成并创建两个空文件app.js和tokenSender.js之后,我们的文件夹结构如下:
步骤2:创建一个用于生成令牌和发送电子邮件的路由
安装完毕后,我们可以开始使用jwt生成令牌并使用nodemailer发送电子邮件,这里我们使用Gmail作为服务以简化操作,但基本概念保持不变。
解释:第一行中,我们导入了nodemailer包,稍后用于发送邮件,然后我们创建了一个transporter对象,用于发送邮件,它包含一些关于电子邮件服务和发送者的配置。然后我们创建另一个对象,该对象包含有关邮件的信息,例如接收者、发送者、邮件内容等。
最后,transporter对象的sendMail方法将邮件发送到指定的地址。
tokenSender.js
const nodemailer = require('nodemailer');
const jwt = require('jsonwebtoken');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD
}
});
const token = jwt.sign({
data: 'Token Data' .
}, 'ourSecretKey', { expiresIn: '10m' }
);
const mailConfigurations = {
// It should be a string of sender/server email
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
// Subject of Email
subject: 'Email Verification',
// This would be the text of email body
text: `Hi! There, You have recently visited
our website and entered your email.
Please follow the given link to verify your email
http://localhost:3000/verify/${token}
Thanks`
};
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
输出:我们使用node命令执行文件,预期中我们的电子邮件已成功发送。
步骤3: 创建一个路由来接收带有令牌和验证邮箱的GET请求
当我们向用户发送令牌后,下一步是在服务器上设置一个路由,用户将通过参数发送GET请求,因为浏览器只能通过URL发送数据。
解释:在这里,我们创建了一个简单的express服务器,并且存在一个GET路由。在此内部,我们从URL中提取信息即令牌,然后使用jwt进行验证,验证发送的令牌是否与我们的服务器生成的令牌完全一致。
最后,根据令牌的验证情况,该路由发送相应的响应。
文件名:
app.js
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = 3000;
app.get('/verify/:token', (req, res)=>{
const {token} = req.params;
// Verifying the JWT token
jwt.verify(token, 'ourSecretKey', function(err, decoded) {
if (err) {
console.log(err);
res.send("Email verification failed,
possibly the link is invalid or expired");
}
else {
res.send("Email verifified successfully");
}
});
});
app.listen(PORT, (error) =>{
if(!error)
console.log("Server is Successfully Running,
and App is listening on port "+ PORT)
else
console.log("Error occurred, server can't start", error);
}
);
输出:
使用node命令运行服务器。在收件箱中,我们将通过服务器发送电子邮件。之后,我们通过点击给定的链接在服务器上进行GET请求,并且服务器会按预期响应电子邮件已验证。稍后,我们会稍微更改URL以使其无效,并且相应的服务器会响应电子邮件验证失败,因为令牌无效。
结论:这是验证电子邮件在nodejs中的整个代码和工作流程。在先决条件部分,您可以查看链接的geeksforgeeks文章,了解更多关于这些库的信息。在一些其他示例中,术语、库、技术、设计模式可能会有一些变化,但总体概念将保持不变。