【问题标题】:Cannot add jwt token to node.js response无法将 jwt 令牌添加到 node.js 响应
【发布时间】:2018-09-10 17:58:16
【问题描述】:

我是 javascript 生态系统的新手,想添加 jwt 令牌以响应此注册路由器:

router.post('/register', (req, res)=> {

    User.findOne({email: req.body.email})
     .then(user => {
        if(user) {
            return res.status(400).json({error: 'Email already exists'});
        } else {                    
            const newUser = new User({
                username: req.body.username,
                email: req.body.email,
                password: req.body.password
            });

            bcrypt.genSalt(10, (err, salt)=> {
                bcrypt.hash(newUser.password, salt, (err, hash)=> {
                    if (err)  throw err;
                    newUser.password = hash;
                    newUser.save()                      
                      .then(user => res.status(200).json(user)) //<=Problem is here
                      .catch(err => console.log(err));
                } )
            })
        }
     })

});

jwt sn-p(在longin 路由器上运行良好)是这样的:

        const payload = {
            username: user.username
        }

        //sign token
        jwt.sign(
            payload, 
            keys.secretOrKey, 
            { expiresIn: 3600}, 
            (err, token)=> { 
                res.json({
                    success: true,
                    token: 'Bearer '+ token,
                    username: username
                });
            });

问题是我不知道如何将 sn-p 添加到响应标头中。 当我在.then(user =&gt; 之后添加它时,我收到SyntaxError: Unexpected token const 错误。

我怎样才能做到?

【问题讨论】:

  • 您是否在.then(user =&gt; 后面添加了jwt sn-p 并使用花括号包裹了sn-p?
  • 是的,我刚刚处理了你在.then(user =&gt; 之后看到的截图
  • @Momin 我的问题是如何将签名的 jwt 令牌集成到现有的承诺中。您提到的链接对此没有帮助。

标签: javascript node.js jwt


【解决方案1】:

听起来您没有将 jwt sn-p 包裹在花括号中。没有它们,问题出现的箭头函数只需要一个表达式。将 jwt sn-p 粘贴到下面的 sn-p 中。

bcrypt.genSalt(10, (err, salt)=> {
    bcrypt.hash(newUser.password, salt, (err, hash)=> {
    if (err)  throw err;
    newUser.password = hash;
    newUser.save()                      
        .then(user => {
          res.status(200).json(user);
          <JWT_Snippet_here>
        }
        .catch(err => console.log(err));
    })
})

Here你可以看到箭头函数的语法是如何定义的。以下引用显示了最重要的部分。

(param1, param2, ..., paramN) => { 语句}

(param1, param2, ..., paramN) => 表达式

为了能够使用语句列表,需要大括号。出现您遇到的错误是因为您的 JavaScript 引擎需要一个表达式,但却找到了一个语句列表。

【讨论】:

  • 感谢您的提示。这解决了错误,但我仍然没有在浏览器控制台的响应标头中收到令牌。 res.data.tokenundefined
猜你喜欢
  • 2021-01-17
  • 2019-10-23
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2021-07-22
  • 2020-05-12
  • 2019-07-13
  • 2017-05-30
相关资源
最近更新 更多