如何用express来检查节点中的jwt登录

时间:2017-05-05 19:16:47

标签: node.js express jwt

我正在尝试为我的api创建一个登录路由。算法如下:

首先检查用户是否存在于数据库中(如果不存在,则发送404错误)。 然后我检查查询中的密码参数是否与数据库中的相同(如果没有,发送400错误)。 最后创建一个令牌并发送它。

以下是代码:

router.post('/login', function(req, res, next){ 
User.getUserByNick(req.params.nick,function(err, rows){
    if(err){ 
        res.json(err);
    }               
    else if(!f.isEmpty(rows)){
        res.status(404);
        res.json({
            error: 404,
            message: 'Authentication failed. User not found.'
            });
    } 
    else{
        res.json(rows);
        if(res.password != req.params.password){
            res.status(400);
            res.json({
                error: 400,
                message: 'Authentication failed. Wrong password.'
                });
        } 
        else{
            var token = jwt.sign(rows, process.env.JWT_SECRET, {
                    expiresInMinutes: 1440 // expires in 24 hours
            });
            res.json({
                success: true,
                message: 'Enjoy your token!',
                    token: token
                });
            }
        }
    });     
});

但是当我尝试使用路由节点崩溃时。我在控制台中得到了下一个错误

/api/node_modules/mysql/lib/protocol/Parser.js:79
    throw err; // Rethrow non-MySQL errors
    ^
ValidationError: "value" must be an object

我不知道为什么,getUserByNick运行良好,当找不到用户时返回[]。否则它会发送带有行的json。所以我认为可能是在我创建rows.password时。

1 个答案:

答案 0 :(得分:0)

即使不能直接回答你的问题,我也发现问题不在于此。我认为你应该先做的主要事情是找到一种如何调试代码的方法。如果你能看到里面的req和res,你就不会问在哪里采取变量。你会发现它自己。如果您不熟悉调试器,请尝试使用visual studio代码。它是免费且强大的。 https://code.visualstudio.com/然后找到如何调试javascript的文档。

如果您想要半解决方案,可以尝试将变量打印到控制台:

console.log(req);
console.log(res);

浏览您的输入,您将找到问题的答案。