我已經創建了通過驗證存儲會話的用戶名/密碼相匹配的是在數據庫中限制路由接入功能快速認證 - 後發送
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')
})
似乎因爲它會很好地工作不能發送頭重定向到/登錄頁面,如果一個人沒有athenticated,但重定向程序後立即關閉與錯誤
Error: Can't set headers after they are sent.
我已經跟蹤誤差降低到res.redirect(「/登錄」),但也不知道如何補救我的錯誤。
編輯:我的登錄路由處理器
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」的處理程序中 – alessioalex
在$ R.page.addStyles中,你似乎正在寫一些東西給響應。這會在您嘗試response.render('user/login')時導致錯誤。如果你在.render()之前調用res.write(),.end(),.send()或.json(),那就是你正在尋找的東西。 –
我只在checkAuth()addStyles重定向後纔會出現錯誤,將文件路徑添加到要包含在佈局上的模塊數組,並且如果在url中輸入/登錄,則工作正常。錯誤是根據棧輸出 –