【问题标题】:Check email exists in mysql database or not with nodejs使用nodejs检查mysql数据库中是否存在电子邮件
【发布时间】:2017-05-16 16:23:29
【问题描述】:

当用户输入表单时,需要检查 mysql 中是否存在电子邮件。 从表单 requser.email 将在表单中输入用户的电子邮件。如何将 requser.email 与数据库进行比较以找到匹配项。

 router.post('/signup', function(req, res, next) {
    var requser = req.body.data.user;
  var hash = bcrypt.hashSync(req.body.data.user.password)
  var str = "";

  /*email check start*/

  /*email check end*/
  switch (requser.role) {
    case "approver":
      str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","approver")';
      break;
    case "user":
      str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","user")';
      break;
    case "admin":
      str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","admin")';
      break;
  }
  if (!str) {
    return res.json({
      "status": "error",
      "data": {
        "redirect": "/"
      }
    });
  }
  connection.query(str, function(error, rows) {
    if (error) {
      console.log("error ocurred", error);
    }
    //console.log(rows);
    res.json({
      "status": error ? "error" : "success",
      "data": rows || ""
    })
  });
});

【问题讨论】:

  • 你有一个 SQL 注入漏洞。
  • 警告:为避免SQL injection bugs 始终使用placeholder values 转义查询中的any 任意数据。此登录系统允许任何人对您的网站和数据进行任何操作

标签: mysql node.js


【解决方案1】:

您可以编写 SELECT 1 查询以获取包含该电子邮件地址的记录,或者在电子邮件字段上定义 UNIQUE CONSTRAINT 以便插入失败。

Here'sUNIQUE CONSTRAINT 的示例,这里是SELECT 1 的示例:

SELECT 1 FROM users WHERE email = <email>;

【讨论】:

  • $email 是 PHP 的东西。这是一个节点问题。
猜你喜欢
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2019-07-13
  • 2014-03-15
  • 2014-05-10
  • 2023-02-03
相关资源
最近更新 更多