Node.js+MongoDB用户状态验证问题:未验证用户禁止登录
补充用户状态验证逻辑实现(Node.js + MongoDB)
针对你的需求,在现有登录验证控制器中加入用户状态判断逻辑即可,核心是在账号密码验证通过后,检查用户的状态字段,根据状态决定是否允许登录。以下是修改后的完整代码:
exports.usuario_verify = function (req, res) { let usuario = req.body.username; let pass = req.body.password; let datos = "Usuario: " + usuario + " Pass: " + pass; if (usuario && pass) { // 验证账号密码 User.find({ Username: usuario, Password: pass }, function (error, results) { if (error) { let data = { title: "Ingreso al sistema", message: "Hubo un error contacte a soporte", }; return res.render("login", data); } if (results.length > 0) { let roles; let userStatus; // 提取用户角色和状态 results.forEach((element) => { roles = element.Roles; // 注意:这里的Status要和你MongoDB集合中存储状态的字段名保持一致 userStatus = element.Status; }); // 先判断用户状态 if (userStatus === "unverified") { let data = { title: "Ingreso al sistema", message: "你的账号尚未验证,请完成验证后登录", }; return res.render("login", data); } // 状态验证通过,设置session并跳转 req.session.usuario = usuario; req.session.role = roles; if (roles === "admin") { res.render("admin_home"); } else if (roles === "user") { res.render("coleccion"); } } else { let data = { title: "Ingreso al sistema", message: "Usuario o contraseña no son correctos", }; res.render("login", data); } }); } else { let data = { title: "Ingreso al sistema", message: "Usuario o contraseña no son correctos", }; res.render("login", data); } }; exports.usuario_add = function (req, res) { res.send("Ruta controlada"); };
关键修改说明:
- 新增
userStatus变量,从查询结果中提取用户状态字段(注意字段名要和你MongoDB中的实际字段匹配,比如如果是小写status就改成element.status) - 在账号密码验证通过后,优先判断用户状态:如果是
unverified,直接返回登录页面并提示未验证信息,终止后续逻辑 - 只有当用户状态为
verified时,才继续执行设置session和角色跳转的逻辑
内容的提问来源于stack exchange,提问作者Solution
相关产品推荐
相关产品推荐

