请告诉我在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
});
}
});
}
});
}
});
});
答案 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});
});
然后,您将拥有另一条后端路由,该路由可以根据您确定的标准来验证链接的有效性。