在生成验证码的过程中,使用了一个自定义的随机数生成函数randomNum,然后在循环中调用了这个函数来生成每一位验证码的字符。但是这个函数的定义放在了循环外部,导致每次循环时都使用的是同一个随机数生成函数,从而导致生成的验证码都是相同的。应该将随机数生成函数的定义放在循环内部,以保证每次循环都使用的是不同的随机数生成函数,从而生成不同的验证码。修正后的代码如下:

// 生成四位随机数
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var code = "";
for (var i = 1; i <= 4; i++) {
    var txt = str[randomNum(0, str.length)];
    code = code + txt;
    function randomNum(min, max) {
        return Math.floor(Math.random() * (max - min) + min);
    }
}

另外,在插入用户邮箱和验证码的SQL语句中,应该使用占位符的方式传递参数,而不是直接将参数拼接到SQL语句中。修正后的代码如下:

const sqlStr2 = `update userinfo set email=?,ecode=? where username=? ;`;
db.query(sqlStr2, [userinfo.email, code, userinfo.username], (err, results) => {
    // ...
});

这样可以避免SQL注入的风险,并且可以正确地传递参数给SQL语句

exportsemail = req res = 查询邮箱是否被占用 const userinfo = reqbody; const sqlStr1 = SELECT FROM userinfo WHERE email = ; dbquerysqlStr1 userinfoemail err results = if err r

原文地址: https://www.cveoy.top/t/topic/iAO7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录