javascript - 身份验证 ExpressJS -> PassportJs : Error: Can't set headers after they are sent

标签 javascript node.js express passport.js passport-local

我正在使用passportjs在expressjs中进行身份验证。这是我的login.js代码

passport.use(new LocalStrategy(
      function(username, password, done) {
        //console.log(username);
        Usercollection.findOne({ username: username }, function (err, user) {
          if (err) { return done(err); }
          if (!user) {
            return done(null, false, { message: 'Incorrect username.' });
          }
          else{
            return done(null, user);
          }
          // if (!user.validPassword(password)) {
          //   return done(null, false, { message: 'Incorrect password.' });
          // }

        });
      }
    ));
    passport.serializeUser(function(user, done) {
      done(null, user);
    });

    passport.deserializeUser(function(user, done) {
      done(null, user);
    });
    router.post('/', passport.authenticate('local', {
      successRedirect: '/automation-panel',
      failureRedirect: '/'
      })
    );

users.js 是

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
    if (req.isAuthenticated()){  next(); }else {res.redirect('/');}
    // var sess = req.session;
    // if(sess.username != null){
    //  // res.send("hello "+ sess.username);
        // console.log(req.user.username);
    // }
    // else{
    //  req.redirect('/');
    // }
    // res.sendFile("fileUpload.html");
    // res.send("hello success");
    res.render('users/index', { title: 'Express'});
});

module.exports = router;

详细错误是

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:690:11

最佳答案

router.get('/', function(req, res, next) {
    if (req.isAuthenticated()) {
        return res.render('users/index', { title: 'Express'});
    }
    else return res.redirect('/');
});

如果问题仍然存在,您可以通过某种方式进行另一个重定向。所以也许这一行就是问题所在。

router.post('/', passport.authenticate('local', {
    successRedirect: '/automation-panel',
    failureRedirect: '/'
    })
);

关于javascript - 身份验证 ExpressJS -> PassportJs : Error: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875271/

相关文章:

javascript - Appcelerator 应用程序计时器,用于检查服务器 api 响应

javascript - 在 Javascript 数组中,是否应该在删除之前检查值?

javascript - 从数据构建类似表格的结构

javascript - 向Sinon 的spy.threw() 传递错误参数时,其行为不符合预期?

javascript - Vorpal 命令上下文

node.js - 如何使用 Mongoose 删除数据库?

node.js - 如何在 express 中设置默认路径(路由前缀)?

javascript - 将作为unit8array接收到的数据流作为pdf保存到前端的文件系统中

angularjs - MEAN.js 动态元数据

node.js - Node js 应用程序在控制台关闭时停止