【发布时间】:2012-01-07 18:58:06
【问题描述】:
我创建了一个函数,通过验证存储的会话用户/通行证与数据库中的内容匹配来限制路由访问
var checkAuth = function(req, res, next){
if(typeof(req.session.user) === 'undefined') {
req.session.user = { name: '', pass: '', loggedIn: false }
}
$R.user.validateLogin(req.session.user, function(err){
if(err) res.redirect('/login')
else {
req.session.user.loggedIn = true
next()
}
})
}
app.get('/restricted', checkAuth, function(req, response){
response.render('index')
})
它似乎工作正常,因为如果一个人没有被认证,它会重定向到 /login 页面,但在重定向后应用程序立即关闭并出现错误
错误:发送后无法设置标头。
我已将错误追溯到 res.redirect('/login') 但不知道如何纠正我的错误。
编辑:我的登录路由处理程序
app.get('/login', function(req, response){
$R.page.addStyles(['forms','user/user'])
response.render('user/login')
})
app.post('/login', function(req, response){
$R.user.validateLogin(req.body, function(err, res){
if(err) response.end(JSON.stringify({error: err.message}))
else {
req.session.user = req.body
response.end(JSON.stringify({ok: true}))
}
})
})
【问题讨论】:
-
我认为错误不在您显示的代码中,而是在路由“/login”的处理程序中
-
似乎在 $R.page.addStyles 您正在为响应写一些东西。当您尝试 response.render('user/login') 时,这将导致错误。如果你在 .render() 之前使用 res.write()、.end()、.send() 或 .json(),这就是你要找的。span>
-
我只在从 checkAuth() 重定向后才收到错误 addStyles 仅将文件路径添加到模块数组以包含在布局中,并且如果我在 url 中输入 /login 则工作正常。错误是根据堆栈输出的 res.redirect(/login)