在sail.js中验证电子邮件

时间:2016-07-08 01:35:57

标签: angularjs node.js sails.js

我正在尝试建立一个门户网站,用于填写申请人在填写表单之前需要创建帐户的表单。唯一的问题是如何阻止申请人用假邮件发送垃圾邮件。是否可以验证帆船中的电子邮件。我在使用节点邮件的快递中完成了这个。

var express = require('express');
var nodemailer= require('nodemailer');
    var app = express();

    var smtpTransport = nodemailer.createTransport("SMTP", {
        service: "Gmail",
        auth: {
            user: "email",
            pass: "pass"
        }
    });
    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(9999,function(){
    console.log("Express Started on Port 3000");
});

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您应该能够在风帆中使用nodemailer,只需将app.get更改为相应的控制器操作。

MailController.js:

module.exports = {

    sendVerificationMail: function(req, res) {
        // your app.get('/send') code
    },

    verifyEmail: function(req, res) {
        // your app.get('/verify') code
    }

}

作为旁注,当另一个用户在第一个用户完成注册之前尝试注册时,您的验证逻辑就会中断:

  1. 第一个用户请求进行电子邮件验证,例如rand = 34
  2. 第二位用户要求进行电子邮件验证,rand = 58
  3. 第一位用户尝试使用id=34验证其电子邮件,验证自34 !== 58
  4. 以来失败