我正在尝试检查存储在数据库中的输入的用户名和密码。 我的解决方案不正确,我认为可能有比我的代码更好的东西。
到目前为止:
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
(false
或true
)并根据值处理回调。
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/