我刚开始使用带有前端的nodejs。但是在验证用户身份时出现一些问题。我正在尝试使用特定的电子邮件和密码来获取用户。我的API如下: 我为任何api请求创建了三个文件控制器,服务和路由器文件。
//userServices.js
const db = require('./../../db-connection/connection')
userAuth: (params, callback) => {
db.query(`SELECT * FROM Users WHERE email = ?`,[params.email],
(error, result, fields) => {
if(!error) {
console.log('result = ' + result[0]);
return callback(error, result[0])
}
else
return callback(error)
});
}
这是我的userController js文件。
//userController.js
const {create, userindex, userAuth} = require('./UserServices');
const {genSaltSync, hashSync, compareSync} = require('bcrypt');
const {sign} = require('jsonwebtoken');
userLoginAuth: (req, res) => {
const body = req.body;
userAuth(body, (error, results) => {
if (error)
console.log(error);
if (!results) {
return res.json({
success: 0,
data: 'Invalid email or password'
})
}
const result = compareSync(body.password, results.password);
if(!result) {
results.password = undefined;
const jsontoken = sign({result: results}, 'choegyel123', {
expiresIn: '1h'
});
return res.json({
success: 1,
message: 'Login successful',
token: jsontoken
})
} else
console.log('password' + result.password)
return res.json({
success: 0,
error: 'Invalid email or password'
});
});
}
但是问题出在userServices.js文件中。我的sql查询已正确执行,但在对“结果”的回调中,我得到了奇怪的对象。我想我应该从数据库表中获取一些相应数据的数组,并且在控制台日志中,我正在获取[对象对象]。我不确定这实际上意味着什么,而且我也都确定这是一个阻止程序,因为我无法在userController中使用该对象检索密码。任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
问题
compareSync
返回带有true
的布尔值,指示正确的密码。您正在使用if(!result)
,相反。{}
在else
上是正确的result.password
的{{1}},因为undefined
是您的compareSync返回值。您打算登录result
。避免将results.password
和result
用于两种不同的事物,因为这样很容易犯这些错误。像results
和bcryptResult
之类的东西可能会更好。resultObj
时,将数据作为第二个参数传递或记录第二个日志,因为连接对象始终显示console.log()
。 更新的代码段
[object Object]