问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Node.js 邮箱验证

创作时间:
作者:
@小白创作中心

Node.js 邮箱验证

引用
1
来源
1.
https://geek-docs.com/nodejs/nodejs-top-articles/1699873428_g_email-verification.html

邮箱验证是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文章,了解更多关于这些库的信息。在一些其他示例中,术语、库、技术、设计模式可能会有一些变化,但总体概念将保持不变。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号