用jsonwebtoken总是提示参数不对,把参数提出来单独用一个变量声明就不报错,这是什么原因?

// keys.js
module.exports = {
    mongoURI: "",
    secretOrKey: "secret"
}
const keys = require("../../config/keys");

router.post("/login", (req, res) => {
    const email = req.body.email;
    const password = req.body.password;
    
    User.findOne({ email }).then(user => {
        if (!user) {
            return res.status(404).json({ email: "用户不存在!" })
        }

        // Load hash from your password DB.
        bcrypt.compare(password, user.password, (err, isMatch)=>{
            if(isMatch){
                const rule = {id:user.id,name:user.name};
                jwt.sign({rule, keys.secretOrKey, {expiresIn:3600}, (err,token)=>{
                    if(err)throw err;
                    res.json({
                        success:true,
                        token:"partiny"+token
                    });
                }});                
                res.json({msg:"success"});
            }else{
                return res.status(400).json({password:"密码错误!"});
            }
        });
    })
})

clipboard.png

阅读 2.1k
1 个回答
jwt.sign(rule, keys.secretOrKey, {expiresIn:3600}, (err,token)=>{
    if(err)throw err;
    res.json({
        success:true,
        token:"partiny"+token
    });
});

多写了两个括号吧:
clipboard.png

rule前面加了一个括号,也就是说你给sign函数传了一个对象:

let a = {rule} // 等价于 let a = {rule: rule}
// 但是
let a = {rule, keys.secretOrKey} // 肯定报错啊,语法解析不过去,难道给你解析成let a = {rule: rule, keys.secretOrKey: keys.secretOrKey}?
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题