node.js - token 未在nodejs中创建

标签 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);
    }
    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;

}

函数userAuthentication是从rout.post请求中调用的

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 中的用户名和密码匹配时,我试图创建一个 token ,但不幸的是 token 没有创建; console.log(token) 行不会将任何结果打印到控制台中。我缺少什么部分???我感谢你们的帮助。

最佳答案

您使用的是哪个jwt Node 模块?
我想它不是 node-jsonwebtoken ,因为它不支持 expiresInMinutes,而仅支持 expiresInMinutes...

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

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

关于node.js - token 未在nodejs中创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046293/

相关文章:

c# - CIL 中的字符串生成器 (MSIL)

c# - Web API - token

javascript - 错误: The `libsass` binding was not found

node.js - 用于开发环境的 Nodemon

c# - MongoDB C# 身份验证异常

authentication - 如何修改当前用户的属性并在整个 session 中持久化它们

java - 无法在 Java 11 中访问 sun.security.pkcs11.SunPKCS11

javascript - 如何在node.js上使用邮戳电子邮件?

javascript - VSCode 在选择任务时生成一个 task.json 条目

java - 如何在没有小程序或外部应用程序的情况下执行基于浏览器内 Web 应用程序客户端证书的身份验证?