在邮件堆栈中进行电子邮件验证

时间:2018-10-23 08:06:02

标签: node.js mongodb express

请告诉我在MERN Stack中注册新帐户时如何验证电子邮件?我想发送一封带有链接的电子邮件,以将页面重定向到用户的电子邮件。 这是我用于注册的node.js代码...请在此处说明如何添加验证部分?

router.post('/abc',function(req,res,next){
User.find({email:req.body.email}).then(function(details){
if(details.length>0){
    return res.status(400).json({
        message:"email exist"
    });

}

else{

    bcrypt.hash(req.body.pass,10,(err,hash)=>{
        if(err){
            return res.status(500).json({
                error:err
            });
        }
        else{  

              var det = new User({

                email:req.body.email,
                password:hash,
                name:req.body.name,
                address:req.body.address,
                mobile:req.body.mobile,
                type:req.body.type


                  });
                 det.save((err,doc)=>{
                if(!err){
                    res.status(200).send(doc);
                    console.log("signed")
                    console.log(doc);
                }
                else{
                    console.log('Error in sending Employees :'+ JSON.stringify(err,undefined,2));
                    return res.status(500).json({
                        error:err
                    });
                }
                });
            }

            });

}
});

  }); 

2 个答案:

答案 0 :(得分:1)

外部路由器功能

function validateEmail(email) {

 var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(email);
}

内部路由器功能

if (validateEmail(req.body.email)) {
   console.log('valid email');
  } else {
   console.log('invalid email');
  }

您可以使用诸如Express Validator之类的替代库来完成相同的工作。

答案 1 :(得分:1)

通常,您需要某种电子邮件API;我个人使用Twilio's SendGrid api(非常容易设置和实现)。使用此api,您可以从后端注册路由构造并发送一个URL(电子邮件验证URL)。实现非常简单:

const sgMail = require('@sendgrid/mail');


sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const link = 'http://'+req.headers.host+'/api/users/register/verifyEmail/'+token;

const htmlContent = 'some html content';

const msg = {
    to: newUser.email,
    from: process.env.VALIDATION_EMAIL_SENDER,
    subject: 'Some email subject',
    html: htmlContent,
};

sgMail.send(msg, (err) => {
    if(Object.entries(err).length > 0) {
            return res.status(500).json({success: false, msg: "Something went wrong; can't send validation email.", err});
    }

    res.status(200).json({success: true, msg: "Check your email and verify account to 
    proceed.", user: {newUser});
});

然后,您将拥有另一条后端路由,该路由可以根据您确定的标准来验证链接的有效性。