Node.js passport.js&;express:[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
我正在将passport用于本地身份验证策略的教程粘在一起。以下是我的主文件中的内容:Node.js passport.js&;express:[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头,node.js,express,passport.js,Node.js,Express,Passport.js,我正在将passport用于本地身份验证策略的教程粘在一起。以下是我的主文件中的内容: var passport = require('passport'); var Strategy = require('passport-local').Strategy; var db = require('./db'); // Initialize Passport and restore authentication state, if any, from the // session. app.us
var passport = require('passport');
var Strategy = require('passport-local').Strategy;
var db = require('./db');
// Initialize Passport and restore authentication state, if any, from the
// session.
app.use(passport.initialize());
app.use(passport.session());
// Configure the local strategy for use by Passport.
//
// The local strategy requires a `verify` function which receives the credentials
// (`username` and `password`) submitted by the user. The function must verify
// that the password is correct and then invoke `cb` with a user object, which
// will be set at `req.user` in route handlers after authentication.
passport.use(new Strategy(
function(username, password, cb) {
db.users.findByUsername(username, function(err, user) {
if (err) { return cb(err); }
if (!user) { return cb(null, false); }
if (user.passwordhash !== password) { return cb(null, false); }
return cb(null, user);
});
}));
然后,我的db.users.findByUsername
函数如下所示:
exports.findByUsername = function(username, cb) {
process.nextTick(function() {
var q = `SELECT *
FROM USERS
WHERE USERNAME = ?`;
dbh.get(q, [username], (err, row) => {
if (err) {
return console.error(err.message);
}
return cb(null, row);
});
router.post('/login',
passport.authenticate('local', { failureRedirect: '/users/login' }),
function(req, res) {
res.redirect('/');
});
我的路线如下所示:
exports.findByUsername = function(username, cb) {
process.nextTick(function() {
var q = `SELECT *
FROM USERS
WHERE USERNAME = ?`;
dbh.get(q, [username], (err, row) => {
if (err) {
return console.error(err.message);
}
return cb(null, row);
});
router.post('/login',
passport.authenticate('local', { failureRedirect: '/users/login' }),
function(req, res) {
res.redirect('/');
});
结果是:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:558:11)
at ServerResponse.header (C:\Users\Jujee\project1\project1\node_modules\express\lib\response.js:767:10)
at ServerResponse.send (C:\Users\Jujee\project1\project1\node_modules\express\lib\response.js:170:12)
[SNIP]
express为什么要这样做?如何修复它?您正在尝试在passport.authenticate之后重定向用户,它可能会发送响应。试试
{successRedirect:'/successRoute',failureRedirect:'/users/login'}
好的,听起来不错