【问题标题】:Getting an error: cannot set headers after they are sent to the client收到错误:在将标头发送到客户端后无法设置标头
【发布时间】:2018-11-10 15:20:28
【问题描述】:

我最近使用bcrypt 向我的网站添加了身份验证。在进行身份验证时,bcrypt 会比较密码。

如果密码匹配,req.session 被设置为 cookie 并使用connect-mongodb-session 写入mongodb。但是当重定向到/events 应用程序崩溃并给我一个错误:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我正在使用把手来呈现我的 html 代码

认证路径:

Router.get('/', (req, res) => {
  res.status(200).render('login', {pageTitle: 'Log In'});
})

Router.post('/', (req, res) => {
  //Authenticate user
  const username = req.body.username;
  const pass = req.body.password;

  User.findOne({username: username}).then((user) => {
    if (user) {
      //Validate password
      console.log(user);
      console.log(user.password);
      bcrypt.compare(pass, user.password).then((doMatch) => {
        console.log(doMatch);
        //Check if password match
        if (doMatch) {
          //To use session use express-session package
          req.session.isLoggedIn = true;
          req.session.user = user;
          req.session.save((err) => {
            console.log(err);
            res.redirect('/');
          });
          return res.redirect('/events');
        } else {
          res.redirect('/');
        }
      }).catch((err) => {
        console.log(err);
      });
    } else {
      return res.redirect('/');
    }
  }).catch((err) => {
    console.log(err);
  });

});

活动路线:

Router.get('/events', (req, res) => {
  if (req.session.isLoggedIn) {

  Event.find({}, (err, events) => {
    res.render('events', {
      prods: events,
      pageTitle: 'Events',
      path: '/events',
      hasProducts: events.length > 0
    });
  }).catch((err) => {
    console.log(err);
  });

} else {
  console.log('User not authenticated');
  res.status(401).send('User not authenticated');
}

});

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    这些行是罪魁祸首。

    req.session.save((err) => {
                console.log(err);
                res.redirect('/');
              });
              return res.redirect('/events');
    

    在这里您将回调传递给save 并立即重定向res.redirect('/events')。 一段时间后,回调重定向res.redirect('/'); 抛出错误。

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 2020-11-01
      • 2023-01-14
      • 2020-07-11
      相关资源
      最近更新 更多