没有使用JWT登录nodejs的日志

时间:2016-11-04 20:36:30

标签: javascript node.js express sequelize.js

我跟随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返回:

{}
在邮差中......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

SELECT team, count(*) FROM table1 GROUP BY table1.team ORDER BY count(*) DESC LIMIT 1 会抛出错误,导致jwt.sign()运行。

  • 在错误情况下,您应该将状态代码设置为catch500
  • properties of an Error are non-enumerable。这意味着JSON序列化程序没有看到res.status(500).json(...)message等属性。由于没有可用的可枚举属性,stack序列化为Error

在您的捕获中,添加{}以查看签名操作失败的原因。您还可以向客户端提供更有用的错误。