【问题标题】:why this error is showing? cant set header after they sent to the client为什么显示此错误?发送到客户端后无法设置标头
【发布时间】:2021-08-19 11:02:12
【问题描述】:

这是我的登录代码:您可以从这里看到令牌,下一张照片是令牌的身份验证 谁能解释一下...................................................... ..................................................... .....................................

    const login = (req, res, next) => {
    var username = req.body.username;
    var password = req.body.password;
    

    User.findOne({$or: [{email: username}, {phoneNumber: username}]})
    .then(user => {
        if (user) {
            bcrypt.compare(password, user.password, function(err, result){
                if (err) {
                    res.json({
                        title: 'Server error',
                        error: err
                    })
                    console.log('err');
                }if (result){
                    const maxAge = 24 * 60 * 60
          const createToken = jwt.sign({ _id: user._id } , process.env.TOKEN_SECRET, { expiresIn: maxAge });

              res.header('auth-token',token);

                    
                }else{
                    return res.status(401).json({
                        title: 'password wrong',
                        error: 'invalid credentials'
                    })
                }
            })
        }
        else {
            return res.status(401).JSON({
                title: 'password wrong',
                error: 'invalid credentials'
            })   
        }
    })

【问题讨论】:

标签: node.js mongodb jwt set token


【解决方案1】:

如果您查看bcrypt.compare 回调,res.json 会执行两次:

  function(err, result) {
    if (err) {
      res.json({}) // ONE
    } 
    if (result) {
      // skipped
    } else {
      return res.status(401).json({ // TWO
        title: 'password wrong',
        error: 'invalid credentials'
      })
    }
  }

if(err)中添加return语句

使用 linter 可以帮助您避免这些疏忽

【讨论】:

  • 我删除了一个并尝试添加 return 但 id 不起作用
猜你喜欢
  • 2023-02-25
  • 2019-10-20
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多