微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 nodejs 进行电子邮件验证

如何解决使用 nodejs 进行电子邮件验证

我正在尝试在注册时发送验证电子邮件。如果验证有效,数据库表中的“Activated”列将更改为“True”。
我可以成功发送电子邮件,但我认为验证码有问题。
当我按下发送到电子邮件链接时,我收到“禁止”!我会使用一些帮助!提前致谢!

    app.post('/insertuser',function (_req,res) {
    var data = JSON.parse(_req.body.data);
    var username = data.username;
    var age = data.age;
    var password = data.password;
    var fname = data.fname;
    var lname = data.lname;
    var address = data.address;
    var city = data.city;
    var email = data.email;
    var sq = data.sq;
    var answer = data.answer;
    var pnumber = data.pnumber;
    var dataentered = data.dataentered;
    
    var date = new Date();
    var mail = {
    "id": username,"created": date.toString()
    }
    secret_code  = sha1(pnumber) //since pnumber is unique;
    
    const token_mail_verification = jwt.sign(mail,secret_code,{ expiresIn: '1d' });
    var url = "http://localhost:3000/verify?username=" + token_mail_verification;

    MysqLConnection.connect(function () {
        var query = "Insert into Customer (Username,Age,Password,First_Name,Last_Name,Email,Address,City,Phone_No,SQ,Answer,Date_Entered) values('" + username + "','" + age + "','" + sha1(password) + "','" + fname + "','" + lname + "','" + email + "','" + address + "','" + city + "','" + pnumber + "','" + sq + "','" + answer + "','" + dataentered + "')";
        MysqLConnection.query(query,function (err,results,_fields) {
            if (err) {
                console.log(err);
                res.send('Please try again!');
            }
            else {
                if (results.affectedRows > 0) {
                    var mailOptions = {
                        from: '//myemail',to: email,subject: "Account Verification",text: "Click on the link below to veriy your account " + url,};
                    transporter.sendMail(mailOptions,function (error,info) {
                        if (error) {
                            console.log(error);
                            //Handle error here
                            res.send('Please try again!');
                        } else {
                            console.log('Email sent: ' + info.response);
                            res.send('Thanks for registering! Please confirm your email! We have sent a link!');
                        }
                    });
                }
                else {
                    console.log("Try again");
                    res.send('Please try again!');
                }

            }
        })
    })
});

验证码

app.get('/verify',function (req,res) {
    token = req.query.id;

    console.log(token)
    if (token) {
        try {
            jwt.verify(token,(e,decoded) => {
                if (e) {
                    console.log(e)
                    return res.sendStatus(403)
                } else {
                    id = decoded.id;

                    MysqLConnection.connect(function () {
                        var query = " UPDATE  Customers  SET  Activation = 'True' ; WHERE  Email =" + email;
                        MysqLConnection.query(query,_fields) {
                            if (err) {
                                console.log(err);
                                res.send('Please try again!');
                            }
                            else {
                                console.log("updated Successfully");
                            }
                        })
                    })
                }
            });
        } catch (err) {
            console.log(err)
            return res.sendStatus(403)
        }
    } else {
        return res.sendStatus(403)
    }
});```

解决方法

你的查询参数被命名为 username 而不是 id 所以代码应该是这样的

   docker stop $(docker ps -aq)
   docker rm $(docker ps -aq)
   docker network prune -f
   docker rmi -f $(docker images --filter dangling=true -qa)
   docker volume rm $(docker volume ls --filter dangling=true -q)
,

在发送电子邮件之前,您可以将用户电子邮件添加到编码正文中

var mail = {
  username: username,email: email,created: date.toString()
}

然后你可以解码它来查询用户信息或更新它, 您的 else 块可能看起来像这样

  var email = decoded.email;

  mysqlConnection.connect(function () {
    var query =
      " UPDATE  Customers  SET  Activation = 'True' ; WHERE  Email =" +
      email;
    mysqlConnection.query(query,function (err,results,_fields) {
      if (err) {
        console.log(err);
        res.send("Please try again!");
      } else {
        console.log("updated Successfully");
      }
    });
  });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。