首页 > 解决方案 > 快速 webapp 上的 Passport.js 身份验证错误“一旦已发送就无法设置标头”

问题描述

嗨,我正在制作一个连接到我的大学提供的远程数据库上的 mysql 服务器的快速 webapp。我正在按照教程设置 passport.js 身份验证,但在尝试发布 /regnew 请求时的数据时遇到了问题

腻子中出现的错误是:

错误:/students/danu7_tc3/project/views/error.hbs:发送后无法设置标题。在 validateHeader (_http_outgoing.js:491:11) 在 ServerResponse.setHeader (_http_outgoing.js:498:3) 在 ServerResponse.header (/students/danu7_tc3/project/node_modules/express/lib/response.js:767:10)在 ServerResponse.send (/students/danu7_tc3/project/node_modules/express/lib/response.js:170:12) 在完成 (/students/danu7_tc3/project/node_modules/express/lib/response.js:1004:10)在 /students/danu7_tc3/project/node_modules/hbs/lib/hbs.js:93:9 在 Object.done (/students/danu7_tc3/project/node_modules/hbs/lib/async.js:74:20) 在 /students /danu7_tc3/project/node_modules/hbs/lib/hbs.js:88:18 at /students/danu7_tc3/project/node_modules/hbs/lib/hbs.js:69:11 at Object.done (/students/danu7_tc3/project /node_modules/hbs/lib/async.

这是我的 index.js 代码

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

var passport = require('passport');

var bcrypt = require('bcrypt');
const saltRounds = 10;


/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', {
        title: 'Express'
    });
});

router.get('/home', function(req, res, next) {
    res.render('home', {
        title: 'Home'
    });
});


router.get('/registration', function(req, res, next) {
    res.render('registration');

});
router.post('/regnew', function(req, res, next) {

    var username = req.body.username;
    var email = req.body.email;
    var password = req.body.password;


    console.log(username);


    const db = require('./db_connection.js');

    bcrypt.hash(password, saltRounds, function(err, hash) {
        db.query('INSERT INTO Users (username, email, password) VALUES 
            ( ? , ? , ? )
            ',[username,email,hash], function(error,result,fields) {
                if (error) throw error;

                db.query('SELECT LAST_INSERT_ID() as user_id', function(error,
                    results, fields) {
                    if (error) throw error;

                    const user_id = results[0];


                    console.log(results[0]);
                    req.login(user_id, function(err) {
                        res.redirect('/home');
                    });



                });
                res.render('registration', {
                    title: 'Success'
                });
            });
    });

});
passport.serializeUser(function(user_id, done) { //store user id in 
    session
    done(null, user_id);
});

passport.deserializeUser(function(id, done) { //read from the session

    done(err, user_id);
});



module.exports = router;

标签: node.jsexpresspassport.js

解决方案


你打res了两次电话。

  1. res.redirect
  2. res.render

推荐阅读