我正在嘗試使用express在node.js服務器上設置通行證本地身份驗證。它似乎應該是非常簡單的。但我陷入困境。快速身份驗證重定向導致無限循環
這兩個片段做工精細在一起:
app.get('/', ensureAuthenticated, function(req, res){
res.redirect('/index.html', { user: req.user });
});
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login.html', failureFlash: true, successFlash: "Success!" }),
function(req, res) {
res.redirect('/');
});
的問題是沒有什麼讓我打字「www.myurl.com/index.html」到地址欄和右側拖放到我的網頁。
如果我使用一個像這樣的任何代碼:
app.get('/index.html', ensureAuthenticated, function(req, res){
res.redirect('/index.html', { user: req.user });
});
好像我陷入一個循環......這將是很好,如果它可以檢查我的身份驗證和送我對我的方式,而不永遠檢查每個重定向。避免這種情況的方法是什麼?
我注意到文檔似乎利用.render而不是重定向。但是這個SEEMS要求我使用.ejs,我寧願不這樣做。這是必須的嗎?
++僅供參考++
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login.html')
}
我已經結束了做app.get('/ index.html',ensureAuthenticated);到目前爲止它工作正常。是否有理由使用「使用」而不是「獲得」? – Jeremythuff
我傾向於將'app.use'用於'真正'中間件,就像我的示例代碼中一樣。此外,'app.use'將匹配GET以外的請求方法,但在這種情況下,這不是真正的問題。因此,除了語義之外,在這種情況下,沒有理由選擇另一個:)(編輯:使用'app.get'也可能存在潛在的副作用,因爲它由路由器中間件處理,但我不認爲他們也會在這裏申請) – robertklep