Tôi đang cố gắng sử dụng phần mềm trung gian authenticateUser() trước khi tải tất cả các trang của tôi. Thay vì bao gồm nó trong mỗi cuộc gọi (như trong app.get ('/', authenticateUser, function() ...)), tôi đã thử thiết lập nó với app.use (authenticateUser) ngay trước khi gọi app.use (app.router).Node.js - Vấn đề với res.redirect trong phần mềm trung gian
Điều này không hiệu quả. authenticateUser về cơ bản là:
if (req.session.loginFailed) {
next()
else {
if (req.session.user_id) {
...
if (userAuthenticated) {
next();
} else {
req.session.loginFailed = true;
console.log('setting loginFailed to true');
res.redirect('/login');
}
}
}
Và sau đó trong app.get ('/ login') Tôi thiết req.session.loginFailed là sai;
Điều này sẽ hiệu quả, nhưng tôi chỉ muốn gọi nó trên app.get() hoặc app.post(), v.v ... cho một trong các trang thực tế của tôi. Tôi nghĩ rằng nó được gọi nhiều lần cho nhiều yêu cầu khác nhau (vì khi tải một trang, 'thiết lập đăng nhậpĐược gọi là đúng' được gọi nhiều lần)
Có cách nào tốt hơn để làm điều này? Hoặc tôi chỉ nên gọi nó trước mỗi trang trên trang web của tôi?
Đủ công bằng, thật vui vì tôi đã thực sự làm việc với các hướng dẫn về nodepad. Vấn đề là toàn bộ trang web của tôi yêu cầu bạn đăng nhập, vì vậy tôi đã tấn công một cách để không phải tự bao gồm nó trên tất cả các tuyến đường, nhưng tôi sẽ chỉ bao gồm nó nếu đó là cách thích hợp. –
Tôi đồng ý với @alessioalex. Tuy nhiên, nếu bạn nhấn mạnh vào cách tiếp cận mà bạn đã đặt ra, hãy đảm bảo rằng 'app.use (authenticateUser)' của bạn là SAU phần mềm trung gian phiên. – danmactough