我正在尝试检查输入的用户名和密码存储在数据库中。 我的解决方案不正确,我认为可能有比我的代码更好的东西。
到目前为止:
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,但用户名和密码是正确的。我该如何解决这个问题?
答案 0 :(得分:2)
在你的成功callback
函数中,你有2个参数,但错误回调,只有一个参数。
在error
和success
情况下,第一个参数的值始终为null
,在if (!bcrypt.compareSync(password, user.password)) {
情况下,第一个参数的值将为undefined
as没有值作为参数传递。
建议:将第一个参数用作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);
}
});
});
答案 1 :(得分:1)
应该是,因为你没有在回调中传递任何东西。改变如下:
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(null, false);
var user = results[0];
if (!bcrypt.compareSync(password, user.password)) {
return callback(null, false);
}
callback(null, true, {
id: user.id.toString(),
});
});
}
app.get('/check', function (req, res) {
var username = 'mahdi';
var originalPassword = 'a';
login(username , originalPassword,function (err, result, id) {
console.log(err);
console.log(result);
console.log(id);
});
});
result
用于查找true|false
行动。 id
表示result
为真时
错误处理还需要err
callback