[英]NodeJS user authentication with JWT
我刚开始使用带有反应前端的 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 查询已正确执行,但在“结果”的回调中,我得到了奇怪的对象。 我想我应该从数据库表中获取一些相应数据的数组,并在我的控制台日志中获取 [object object]。 我不确定这实际上意味着什么,我也确信这是一个阻止程序,因为我无法在我的 userController 中使用此对象检索密码。 任何帮助将不胜感激。 谢谢!
问题
compareSync
返回一个布尔值,其中true
表示正确的密码。 您正在使用if(!result)
,这是相反的。{}
在else
上是正确的undefined
result.password
,因为result
是您的 compareSync 返回值。 你的意思是记录results.password
。 避免将result
和results
用于两种不同的事情,因为这样很容易犯这些错误。 像bcryptResult
和resultObj
这样的东西可能会更好。console.log()
,将数据作为第二个参数传递或创建第二个日志,因为连接对象始终显示[object Object]
。更新的片段
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', results.password)
return res.json({
success: 0,
error: 'Invalid email or password'
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.