2017-05-08 5 views
0

Ich benutze Express js. Im Stammordner habe ich einen public Ordner, der die Unterordner stylesheets, javascripts, fonts, images und html enthält. Ich möchte meine Assets schützen, wenn der Benutzer nicht angemeldet ist. Wenn zum Beispiel jemand den Webbrowser öffnet und ohne Login eine Anfrage für http://localhost:3000/images/hello.jpg macht, sollte die Anfrage zur Anmeldeseite umgeleitet werden.So deaktivieren Sie app.use (express.static ('/ public')); Express js

Um dies zu erreichen, verwende ich express.static(path.join(__dirname, '/public')) bedingt.

Herausforderung 1

Login-Seite mit auch einige 4 bis 5 Assets (CSS und JS-Dateien), die in den gleichen öffentlichen Ordnern abgelegt werden.

Challenge 2

ich diesen Code express.static(path.join(__dirname, '/public')) wie diese bin mit:

if(userIsLoggedIn){ 
    express.static(path.join(__dirname, '/public')) 
}else{ 
    //what to do here??? 
    //I need a code here which makes public folder as non-static folder 
} 

Zum Beispiel haben wir 2 Benutzer A und B. Beide Benutzer verwenden verschiedene Computer. Benutzer A führt eine erfolgreiche Anmeldung durch, und auf dem Server wird der Ordner public als static festgelegt, aber Benutzer B hat keine Anmeldung ausgeführt. Er greift jetzt direkt auf die Ressourcen zu, auf die er zugreifen kann.

Dies geschieht, weil wir den öffentlichen Ordner nicht als statisch auf Benutzerbasis festlegen. Wir machen ihn statisch, wenn einer der Benutzer eine erfolgreiche Anmeldung durchführt.

+0

Fügen Sie eine Middleware hinzu, um vor allen geschützten Elementen auf ihre Authentifizierung zu prüfen. – krrish

Antwort

2

Sie können eine zusätzliche Middleware vor dem express.static hinzufügen, um eine Benutzervalidierung zu erzwingen.

var VerifyUser = require('./verifyuser'); 
app.use(VerifyUser, express.static(__dirname + '/public')); 


//VerifyUser code 
module.exports = function(req, res, next) { 
    if(user.isLogged) 
     next(); 
    else 
    next(err); //presume you have some error handler middleware 
}; 
0

Ein schneller Weg wäre einfach ein leeres Verzeichnis mkdir und zeigen Sie darauf. Oder fügen Sie Dateien hinzu, bei denen es Ihnen nichts ausmacht, öffentlich zu sein.

express.static(path.join(__dirname, '/someemptydirectory')) 
Verwandte Themen