【问题标题】:Nodejs passport setup confusionNodejs护照设置混乱
【发布时间】:2019-04-30 00:37:17
【问题描述】:

我一直在尝试设置我的 Nodejs MySQL 数据库配置。我在 Github 上找到了 MySQL 的 thispassport.js 配置。配置工作正常,但有一部分我不明白。

var insertQuery = "INSERT INTO users ( email, password ) values ('" + email +"','"+ password +"')";
                    console.log(insertQuery);
                connection.query(insertQuery,function(err,rows){
                newUserMysql.id = rows.insertId;

                return done(null, newUserMysql);
                }); 

我对@9​​87654327@ 字段感到困惑。我使用的表没有名为 insertID 的字段。但是,它确实有一个名为 ID 的字段。我尝试将该行更改为

newUserMysql.id = rows.Id;

这样做给了我:

错误:无法将用户序列化到会话中

保持原样不会出错

看起来insertID 与我表的ID 字段无关,但我不明白它的含义

【问题讨论】:

  • 警告:为避免SQL injection bugs 始终使用placeholder values 转义查询中的任何任意数据。
  • 该代码不仅陈旧,而且还鲁莽地忽略了使用占位符语句正确组合查询。它不应该被使用。更安全的方法是定义一个用户模型,例如使用Sequelize,并使用它来保存您的数据。不要忘记使用像Bcrypt 这样的正确密码散列来正确散列您的密码。 从不将它们保存为纯文本。
  • 谢谢。我会这样做,但我仍然不明白 insertID 是如何工作的

标签: mysql node.js passport.js


【解决方案1】:

这可能代表LAST_INSERT_ID(),这是插入的最后一行的ID。

INSERT 的响应不是“行”而是结果对象,所以最好将其命名为:

connection.query("...", function(err, result) {
  newUserMysql.id = result.insertId;

  return done(null, newUserMysql);
});

需要注意的是,使用 Promises 可以显着简化您的代码,async/await 可以更进一步。这可能很简单:

let result = await connection.query("...");

newUserMysql.id = result.insertId;

return newUserMysql;

async function 中的位置,其中包含像 Sequelize 这样的 Promise 驱动的数据库库。您没有处理第一种情况下的潜在错误。在第二个你会得到异常,当出现问题时会唤醒你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2016-03-18
    • 2018-10-14
    相关资源
    最近更新 更多