javascript - NodeJs 检查用户名和密码返回 null

标签 javascript node.js

我正在尝试检查存储在数据库中的输入的用户名和密码。 我的解决方案不正确,我认为可能有比我的代码更好的东西。

到目前为止:

function login (username, password, callback) {
    var query = "SELECT  * FROM users WHERE username = ?";

    connection.query(query, [username], function (err, results) {
        if (err) return callback(err);
        if (results.length === 0) return callback();
        var user = results[0];

        if (!bcrypt.compareSync(password, user.password)) {
            return callback();
        }

        callback(null,   {
            id:          user.id.toString(),
        });

    });
}
app.get('/salam', function (req, res) {
    var username = 'mahdi';
    var originalPassword = 'a';

    login(username , originalPassword,function (callback) {
        console.log(callback);
    });
});

在我的代码中,console.log(callback); 返回 null,但用户名和密码是正确的。我该如何解决这个问题?

最佳答案

在成功回调函数中,您有 2 个参数,但在错误回调中只有一个参数。

错误成功情况下,第一个参数的值将始终为null,而在if (!bcrypt.compareSync(password, user.password)) {情况下,第一个参数的值将为未定义,因为没有值作为参数传递。

建议:使用第一个参数作为Boolean(falsetrue)并根据值处理回调。

function login(username, password, callback) {
  var query = "SELECT  * FROM users WHERE username = ?";

  connection.query(query, [username], function(err, results) {
    if (err) return callback(false);
    if (results.length === 0) return callback();
    var user = results[0];

    if (!bcrypt.compareSync(password, user.password)) {
      return callback(false);
    }
    callback(true, {
      id: user.id.toString(),
    });

  });
}
app.get('/salam', function(req, res) {
  var username = 'mahdi';
  var originalPassword = 'a';

  login(username, originalPassword, function(success, value) {
    if (success) {
      console.log(value);
    }
  });
});

关于javascript - NodeJs 检查用户名和密码返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698552/

相关文章:

Node.js 流直接上传到谷歌云存储

javascript - 为什么 Array.push.apply 不起作用?

javascript - 在没有轮询器的情况下基于 MySQL 数据库创建 Node.js 仪表板

javascript - 有什么方法可以停止或暂停 JSContext 对象中 Javascript 的执行?

javascript - 为什么我的 Express api 注册路由没有 POSTing?

node.js - 事件循环作为语言构造公开的其他语言(框架)?

node.js - Mongoose 检索没有 _id 字段的数据

javascript - 如何使用 Javascript 模糊 Canvas 中的 fillRect

JavaScript、正则表达式、模式中的 var

javascript - 如何用 Sinon 模拟 pg Pool