如何使用 express/node 确认电子邮件地址?

新手上路,请多包涵

我正在尝试为用户建立电子邮件地址验证,以验证他们的电子邮件是真实的。我应该使用什么包来确认用户的电子邮件地址?到目前为止,我使用猫鼬和快递

代码示例

var UserSchema = new mongoose.Schema({
    email: { type: String, unique: true, lowercase: true }
    password: String
});

var User = mongoose.model('User', UserSchema);

app.post('/signup', function(req, res, next) {
   // Create a new User
   var user = new User();
   user.email = req.body.email;
   user.password = req.body.password;
   user.save();
});

在 app.post 代码中,我如何确认用户的电子邮件地址?

原文由 sinusGob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 680
2 个回答

您要查找的内容称为“帐户验证”或“电子邮件验证”。有很多 Node 模块可以执行此操作,但原理如下:

  • 您的用户模型应该有一个 active 属性是 false 默认情况下
  • 当用户提交有效的注册表单时,创建一个新用户(谁的 active 将是 false 最初)
  • 使用加密库创建一个长随机字符串(通常 128 个字符即可)并将其存储在您的数据库中,并参考用户 ID
  • 将电子邮件发送到提供的电子邮件地址,并将哈希作为指向服务器上路由的链接的一部分
  • 当用户单击链接并点击您的路线时,检查 URL 中传递的哈希
  • 如果数据库中存在哈希,则获取相关用户并将他们的 active 属性设置为 true
  • 从数据库中删除哈希,不再需要它

您的用户现已通过验证。

原文由 Soviut 发布,翻译遵循 CC BY-SA 4.0 许可协议

var express=require('express');
var nodemailer = require("nodemailer");
var app=express();
/*
    Here we are configuring our SMTP Server details.
    STMP is mail server which is responsible for sending and recieving email.
*/
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "Your Gmail ID",
        pass: "Gmail Password"
    }
});
var rand,mailOptions,host,link;
/*------------------SMTP Over-----------------------------*/

/*------------------Routing Started ------------------------*/

app.get('/',function(req,res){
    res.sendfile('index.html');
});
app.get('/send',function(req,res){
        rand=Math.floor((Math.random() * 100) + 54);
    host=req.get('host');
    link="http://"+req.get('host')+"/verify?id="+rand;
    mailOptions={
        to : req.query.to,
        subject : "Please confirm your Email account",
        html : "Hello,<br> Please Click on the link to verify your email.<br><a href="+link+">Click here to verify</a>"
    }
    console.log(mailOptions);
    smtpTransport.sendMail(mailOptions, function(error, response){
     if(error){
            console.log(error);
        res.end("error");
     }else{
            console.log("Message sent: " + response.message);
        res.end("sent");
         }
});
});

app.get('/verify',function(req,res){
console.log(req.protocol+":/"+req.get('host'));
if((req.protocol+"://"+req.get('host'))==("http://"+host))
{
    console.log("Domain is matched. Information is from Authentic email");
    if(req.query.id==rand)
    {
        console.log("email is verified");
        res.end("<h1>Email "+mailOptions.to+" is been Successfully verified");
    }
    else
    {
        console.log("email is not verified");
        res.end("<h1>Bad Request</h1>");
    }
}
else
{
    res.end("<h1>Request is from unknown source");
}
});

/*--------------------Routing Over----------------------------*/

app.listen(3000,function(){
    console.log("Express Started on Port 3000");
});

按照代码示例,您可以使用 nodemailer 发送链接,然后进行验证。这是一个链接: https ://codeforgeek.com/2014/07/node-email-verification-script/

原文由 BlackMamba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏