Node.js Node JS TypeError:机密必须是字符串或缓冲区

Node.js Node JS TypeError:机密必须是字符串或缓冲区,node.js,jwt,Node.js,Jwt,我正在使用JWT的对用户登录进行身份验证,但当我想在/auth路线上发表文章时,总是会出现以下错误 (节点:3385)未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:1):TypeError:secret必须是字符串或缓冲区 (节点:3385)弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程 这是我的密码 app.post('/auth', function (req, res, next) { var us

我正在使用JWT的对用户登录进行身份验证,但当我想在
/auth
路线上发表文章时,总是会出现以下错误

(节点:3385)未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:1):TypeError:secret必须是字符串或缓冲区

(节点:3385)弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程

这是我的密码

app.post('/auth', function (req, res, next) {
    var username = req.body.username;
    var password = req.body.password;

    User.findOne({
        where: {username: username}
    }).then(function (user) {
        if(user){
            bcrypt.compare(req.body.password, user.password).then(function (passcheck) {
                if(passcheck){
                    var jwtUser = {
                        username: user.username,
                        name: user.name,
                        score: user.score,
                        accesslevel: "all"
                    };

                    var token = jwt.sign(jwtUser, app.get('superSecretString'), {
                        expiresIn: 1440 //expires in 24 hours
                    });

                    //callback(token);

                    res.json({
                        success: true,
                        message: 'Here´s your token.',
                        token: token
                    });

                    /*
                    var resp = {success: true, message: 'Heres your token.', token: token};
                    response.write(JSON.stringify(resp));
                    */
                }else{
                    res.status(401).json({
                        success: false,
                        message: 'Authentification failed. Password or Username wrong'
                    });
                }
            });
        }else{
            res.status(401).json({
                success: false,
                message: 'Authentification failed.'
            });
        }
    }).catch(next);
});

谢谢您的回答。

问题是您在配置文件中没有声明为机密。 你可以用另一种方式来做

const token = jwt.sign(user, '123456', {
                    expiresIn: 60 * 24 // expires in 24 hours
                });

删除
app.get('superSecretString')
并添加
'123456'

我认为您需要传递到jwt。请签署正确的参数。我会从这个app.get('superSecretString')开始检查错误。@mykolaborarysuk thx,我忘记了在config.js“module.exports”中的“s”,您应该在代码中添加一些解释,使其成为更高质量的答案。
 const token = jwt.sign(
   { email: fetchedUser.email, userId: fetchedUser._id },
   "secret_this_should_be_longer",
   { expiresIn: "1h" }
 );