Nic*_*tad 1 session-cookies node.js express express-session
还有一个"我刚刚开始学习node.js/express,现在我卡住了"这里的人.我试着到处寻找答案,但我已经走到了尽头.这是我的第一个Stackoverflow问题,所以请告诉我,如果我做错了什么或非常规的.
我正在尝试创建一个POST请求,将User-object保存到express-session(在MongoDB上),并将您重定向到处理会话信息的URL.
问题是,在设置标头之前重定向用户,并给出以下内容:
Error: Can't set headers after they are sent.
这是我的代码.我知道这很多..我很抱歉.
// Handler for POST requests from root page (/)
router.post('/', function(req, res) {
console.log("Router: A POST request for: \"/\" has been called!");
var username = req.body.username;
var password = req.body.password;
// Connect to database
mongoose.connect(dbAddress);
var db = mongoose.connection;
// Report if error in connection
db.on('error', console.error.bind(console, 'Database: Connection error..'));
// Callback function on 'open'
db.once('open', function() {
console.log("Database: Connection successful!");
console.log("Database: User supplied username: " + username);
console.log("Database: User supplied password: " + password);
// Find User object with a userId of req's username
User.findOne({ 'userId' : username.toUpperCase() }, function(err, userObj) {
if (err)
return console.err(err);
// Disconnect when done retrieving user object
mongoose.disconnect();
if ( userObj ) {
console.log("Database: Returned password from MongoDB:");
console.log(userObj.password);
var db_password = userObj.password;
if (password === db_password) {
console.log("Database: User Authenticated");
// Set 'req.session.user' as cookie
req.session.user = userObj;
// Redirect to homepage, with new cookie set
res.redirect('/');
} else { // If passwords don't match
res.render('index', {
showError: true
});
}
} else { // If userObj is null
res.render('index', {
showError: true
});
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
请注意'req.session.user = userObj'部分.在这里,我试图在会话中将'user'设置为从MongoDB检索的用户对象.在下一行中,我将用户重定向回"/"的GET请求处理程序,该处理程序根据会话信息处理用户.
出于某种原因,这些都不是按顺序发生的.GET请求处理程序找不到req.session.user.
我知道node.js是关于异步的,但是从我在网上发现的其他例子来看,这应该是有效的.我在这里错过了什么?
保存会话后,您可以将重定向放入回调中,例如:
...
// Set 'req.session.user' as cookie
req.session.user = userObj;
req.session.save(function(err) {
// session saved
res.redirect('/')
})
...
Run Code Online (Sandbox Code Playgroud)
希望这将确保在保存会话后仅重定向用户.
注意:确保使用Bcrypt或pbkdf2之类的哈希密码.
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |