Node.JS /护照 - 错误:发送后无法设置标题。在ServerResponse.OutgoingMessage.setHeader
问题描述:
我一直在尝试执行一些身份验证与Passport本地和node.js当然。不过,我不断收到以下错误:Node.JS /护照 - 错误:发送后无法设置标题。在ServerResponse.OutgoingMessage.setHeader
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
at ServerResponse.header (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:717:10)
at ServerResponse.res.location (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:831:8)
at ServerResponse.redirect (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:870:8)
at complete (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:241:26)
at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:250:15
at pass (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/authenticator.js:427:14)
at Authenticator.transformAuthInfo (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/authenticator.js:449:5)
at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:247:22
at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/http/request.js:51:7
我的代码如下:
passport.use(new LocalStrategy({usernameField:'email', passwordField: 'password'},
function(email, password, done) {
User.find({ where: { email: email }}).success(function(user) {
if (!user) {
done(null, false, { message: 'Unknown user' });
}
else if (password != user.password) {
done(null, false, { message: 'Invalid password'});
}
else {
done(null, user);
}
}).error(function(err){
done(err);
});
return done(null, false);
}
));
答
你调用done()
回调的两倍。在你的if语句中,然后是最后一个。
最后一个是不需要的,因为你的if/else和成功/错误的逻辑应该总是有所作为。
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
User.find({
where: {
email: email
}
}).success(function(user) {
if (!user) {
done(null, false, {
message: 'Unknown user'
});
} else if (password != user.password) {
done(null, false, {
message: 'Invalid password'
});
} else {
done(null, user);
}
}).error(function(err) {
done(err);
});
}
));
谢谢......它的工作原理:-) – Denny 2014-08-28 13:52:18
如果它有效,你应该接受他的答案。 – 2014-08-28 15:04:04
还有一件事......如果登录凭据无效,我如何将相应的错误消息(例如“无效密码”)传递给我的模板?我正在使用快速车把。 – Denny 2014-08-29 06:26:31