我跟随this tutorial将JWT身份验证与Express路由和Sequelize数据库管理相结合。在本教程中,他们在使用Sequelize时使用MongoDB,但最终结果应该是相同的。
const jwt = require('jsonwebtoken');
const apiRoutes = express.Router();
apiRoutes.post('/authenticate', (req,res) => {
User.findOne({
where: {username: req.body.username}
}).then(user => {
if (!user) {
res.json({ success: false, message: 'Authentication failed. User not found.'});
}else{
if (user.password != req.body.password) {
res.json({ success: false, message: 'Authentication failed. Wrong password.' })
}else{
console.log('I am logged');
const token = jwt.sign(user, app.get('superSecret'), {
expiresIn: 60*60*24
});
console.log(`I'm not logged :(`, token);
res.json({
succes: true,
message: 'Enjoy your token!',
token
});
}
}
}).catch(err => {
res.json(err);
})
});
记录的是:
Magic happens at http://localhost:8080
Express server listening on port 8080
Executing (default): SELECT `id`, `username`, `password`, `admin`, `createdAt`, `updatedAt` FROM `users` AS `user` WHERE `user`.`username` = 'Kevin frafster' LIMIT 1;
I am logged
POST /api/authenticate 200 22.819 ms - 2
所以令牌之后的日志没有记录,我不明白为什么。检查用户名和密码是否正常工作并返回消息,但此POST返回:
{}
在邮差中......有什么想法吗?
答案 0 :(得分:1)
SELECT team, count(*)
FROM table1
GROUP BY table1.team
ORDER BY count(*) DESC
LIMIT 1
会抛出错误,导致jwt.sign()
运行。
catch
。 500
。Error
are non-enumerable。这意味着JSON序列化程序没有看到res.status(500).json(...)
,message
等属性。由于没有可用的可枚举属性,stack
序列化为Error
在您的捕获中,添加{}
以查看签名操作失败的原因。您还可以向客户端提供更有用的错误。