Node.js 邮箱验证

Node.js 邮箱验证

邮箱验证是Node.js中的一种技术,用于确保所提供的电子邮件是否对应于现有的用户,否则数据库将填满不必要的用户。

这个过程是这样的,我们向电子邮件发送某种令牌,用户发送带有该令牌的get请求,现在如果服务器先前发送的令牌与get请求中的令牌完全一致,则将认为邮箱已经验证。

Node.js 邮箱验证

前提条件: 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
JavaScript

安装完成并创建两个空文件app.js和tokenSender.js之后,我们的文件夹结构如下:

Node.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); 
}); 
JavaScript

输出: 我们使用node命令执行文件,预期中我们的电子邮件已成功发送。

Node.js 邮箱验证

步骤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); 
    } 
); 
JavaScript

输出:

使用node命令运行服务器。

Node.js 邮箱验证

在收件箱中,我们将通过服务器发送电子邮件。之后,我们通过点击给定的链接在服务器上进行GET请求,并且服务器会按预期响应电子邮件已验证。稍后,我们会稍微更改URL以使其无效,并且相应的服务器会响应电子邮件验证失败,因为令牌无效。

Node.js 邮箱验证

结论: 这是验证电子邮件在nodejs中的整个代码和工作流程。在先决条件部分,您可以查看链接的geeksforgeeks文章,了解更多关于这些库的信息。在一些其他示例中,术语、库、技术、设计模式可能会有一些变化,但总体概念将保持不变。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册