Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 未在nodejs中创建令牌_Node.js_Authentication_Token - Fatal编程技术网

Node.js 未在nodejs中创建令牌

Node.js 未在nodejs中创建令牌,node.js,authentication,token,Node.js,Authentication,Token,我有一个从mysql数据库中选择用户名并将结果返回post请求的函数,如下所示: function userAuthentication(user){ var deferred = Q.defer(); pool.getConnection(function(err, connection) { if (err) { var dbError = new Error('No db connection'); console.log(dbError);

我有一个从mysql数据库中选择用户名并将结果返回post请求的函数,如下所示:

function userAuthentication(user){
var deferred = Q.defer();
pool.getConnection(function(err, connection) {
    if (err) {
        var dbError = new Error('No db connection');
        console.log(dbError);
    }
    else {
        var selectUserName = 'SELECT * FROM User WHERE username= '+connection.escape(user)+' ';

        connection.query(selectUserName, function(error, rows){
            if(error){
                console.log(error);
                deferred.reject(error);
            }
            else if(rows.length === 0){
                var countError = new Error('No User Found');
                console.log ("Database.js -> "+ countError);
                deferred.reject(countError);
            }else{
                deferred.resolve(rows);
            }
        });
    }
    connection.release();
});
return deferred.promise;
}

从rout.post请求调用函数
userAuthentication

router.post('/checkAuthentication', function(request, response) {

    database.userAuthentication(request.body.username).then(function(data) {
        if(data[0].RowDataPacket!=0){
            if(bcrypt.compareSync(request.body.password,data[0].password)){
                var token = jwt.sign({
                   username: data[0].username,
                }, superSecret,{
                    expiresInMinutes: 1440
                });

                console.log(token);
                // return the information including token as JSON
                response.json({
                    success: true,
                    message: 'Token Created',
                    token: token
                }); 
            }
            else{
                response.json({ success: false, message: 'Authentication failed. Wrong Password.' });
            }
        }else{
            response.json({ success: false, message: 'Authentication failed. User not found.' });
        }       
    });
});

当我检查输入的用户名和密码是否与mysqlDb中的用户名和密码匹配时,我试图创建一个令牌,但不幸的是,没有创建令牌;行
console.log(token)
没有将任何结果打印到控制台中。我缺少的部分是什么???非常感谢你们的帮助。

你们在使用哪个
jwt
节点模块?
我想它不是,因为它不支持
expiresInMinutes
,而只支持
expiresInMinutes

但是,您应该将
jwt.sign()
调用括在try/catch块中,以捕获它抛出的任何错误…:

try {
  var token = jwt.sign(
    {
      username: data[0].username,
    },
    superSecret,
    {
      expiresIn: 1440 * 60,
    }
  );
} catch(err) {
  console.error('error signing json web token:', err);
}

您说“行
console.log(token)
没有将任何结果打印到控制台”:这到底是什么意思?console.log语句是否未执行?如果是,它是否打印空字符串、null、未定义@MarcoS你说得对,我把var标记当作变量。。如何在控制台中检查是否创建了令牌?因为接下来的几行response.json都没有抓取-
console.log(token)
语句没有执行吗?如果是的话,它到底打印什么?没有任何东西输出到控制台,所以它没有被执行。您应该尝试调试代码流,然后。。。例如,在调用
jwt.sign()
之前添加一个
console.log('calling jwt.sign()')
语句,等等…var jwt=require('jsonwebtoken')这一个,jsonwebtoken请参阅我更新的答案:尝试使用try/catch块,并使用
expiresIn
而不是
expiresInMinutes
…有效,在您的控制器中,我没有看到任何
超级机密的定义…:-(只是一个垃圾问题:$1440*60它将在24小时内过期?是的,我只将1440分钟转换为秒…你也可以使用“1天”之类的,因为
expiresIn
is
rauchg/ms.js
格式(请参阅)…)。。。