我正在尝试检查存储在数据库中的输入的用户名和密码。
我的解决方案不正确,我认为可能有比我的代码更好的东西。
到目前为止,这里:
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,但是用户名和密码正确。我怎样才能解决这个问题? 最佳答案
在成功的callback
函数中,您有2个参数,但在错误回调中,只有一个参数。
在error
和success
情况下,第一个参数的值始终为null
,在if (!bcrypt.compareSync(password, user.password)) {
情况下,第一个参数的值将为undefined
,因为没有值作为参数传递。
建议:将第一个参数用作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);
}
});
});