Restituire il server Web statico smette di funzionare dopo aver abilitato l’autenticazione di base HTTP

Ho un funzionamento node.js Restituire il server configurato per funzionare come un server web statico. Ecco il codice pertinente;

var server = restify.createServer({ name: 'myapp', version: '1.0.0' }); var static_webserver = function (app) { app.get(/.*/, restify.serveStatic({ 'directory': 'static', //static html files stored in ../static folder 'default': 'index.html' })); } //var static_server = function (app) static_webserver(server); 

Dopo aver abilitato l’autenticazione di base HTTP per avere una sicurezza migliore per le altre API REST, il server web statico ha smesso di funzionare.

Questo è il codice per abilitare l’autenticazione di base HTTP.

 server.use(restify.authorizationParser()); function verifyAuthorizedUser(req, res, next) { var users; users = { foo: { id: 1, password: 'bar' } }; if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) { // Respond with { code: 'NotAuthorized', message: '' } next(new restify.NotAuthorizedError()); } else { next(); } next(); }//function verifyAuthorizedUser(req, res, next) server.use(verifyAuthorizedUser); 

Sembra che dopo l’abilitazione dell’autenticazione, nessun browser Web sia stato in grado di visitare le pagine Web statiche HTML perché è richiesta l’autenticazione. Come posso distriggersre l’autenticazione per il server Web statico ma abilitare l’autenticazione per le altre API REST?

Se il tuo nodojs è aggiornato abbastanza per supportare string.startsWith() :

 function verifyAuthorizedUser(req, res, next) { var path = req.path(); // check if the path starts with /static/ if (path.startsWith('/static/')) { return next(); } var users; users = { foo: { id: 1, password: 'bar' } }; if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) { // Respond with { code: 'NotAuthorized', message: '' } next(new restify.NotAuthorizedError()); } else { next(); } next(); } 

Se non hai startsWith (), una buona vecchia espressione regolare farà:

 if (path.match(/\/static\/.*/)) { return next(); }