2014-10-19 3 views
1

У меня есть приложение написано в express.js, и я стараюсь, чтобы разделить это приложение на 2 части:Экспресс - общедоступный каталог разделен на авторизованных/неавторизованных пользователей

  • один для неавторизованных пользователей (с маршрутами только в/- целевая страница,/логин и/* - error404)
  • и второй (маршруты будут:/- целевая страница,/приложение/* - угловой SPA, который будет обрабатывать маршрутизацию на своих собственных)

Экспресс также настроен на получение статических файлов с /unauth/public/ A ой, я хочу, чтобы добавить второй статический папку для запроса из авторизованных маршрутов - /auth/public , который идет в/приложение/*

Мой маршрут конфигурации выглядит следующим образом:

var authRoutes = express.Router(); 
var unauthRoutes = express.Router(); 

authRoutes.get('/app/*', function(req, res, next) { 
    if(!req.isAuthenticated()) 
     return res.redirect("/login/"); 
    res.send("AUTHORIZED"); 
}); 

unauthRoutes.get('/', function(req, res, next) { 
    res.send("LANDING PAGE"); 
}); 

unauthRoutes.get('/login/', function(req, res, next) { 
    if(req.isAuthenticated()) 
     return res.redirect("/app/"); 
    res.send("LOGIN PAGE"); 
}); 

unauthRoutes.get('/registration/', function(req, res, next) { 
    if(req.isAuthenticated()) 
     return res.redirect("/app/"); 
    res.send("REGISTRATION PAGE"); 
}); 

unauthRoutes.get('/*', function(req, res, next) { 
    res.send("ERROR 404"); 
}); 

app.use('/', authRoutes); 
app.use('/', unauthRoutes); 

Я попытался изменить req.url и вызов другой статический oruter express.static('auth/public') на этой основе:

Using express.static middleware in an authorized route

Но я не знаю, как маршрут app.get('/auth/*', ...) для обработки - предыдущая модификация заменит URL и этот маршрут никогда не будет называться ..

ответ

2

Вы могли бы попробовать что-то вроде этого:

// Create your static middlewares 
var unauthStatic = express.static('unauth/public'); 
var authStatic = express.static('auth/public'); 

// This goes in place of where you would normally load your static middleware 
app.use(function(req, res, next) { 
    if (req.isAuthenticated()) { 
     authStatic(req, res, next); 
    } else { 
     unauthStatic(req, res, next); 
    } 
}); 

редактировать:

, если вы хотите, прошедшие проверку подлинности, чтобы пользователи могли получить доступ к файлам из обоих AUTH и НЕСАНКЦ каталоги, вы можете сделать два вызова app.use, например:

app.use(unauthStatic); 
app.use(function(req, res, next) { 
    if (! req.isAuthenticated()) { 
     return next(); 
    } 
    authStatic(req, res, next); 
}); 
0

Помните, что экспресс использует промежуточное программное обеспечение в стеке, то есть служить данный запрос , все зарегистрированное промежуточное программное обеспечение используется в порядке use d. Как только немного промежуточного вызова вызывает req.send, никакое другое промежуточное программное обеспечение не будет выполнено. Во всяком случае, попробовать что-то вроде этого:

function Authorization(req, res, next) { 
    if(!req.isAuthenticated()) 
     return res.redirect("/login"); 
    next(); 
} 

var AnonRouter = express.Router() 
    // GET /style.css will request /unauth/public/style.css 
    .use(express.static('unauth/public')) 
    .get('/', function (req, res) { }) 
    .get('/login', function (req, res) { }); 

var AuthRouter = express.Router() 
    .use(Authorization) 
    // GET /app/style.css will request /auth/public/style.css 
    .use(express.static('auth/public')) 
    .get('*', function (req, res, next) { 
     // Handle reqs for non-static files 
    }); 

app.use('/', AnonRouter); 
app.use('/app', AuthRouter); 
app.get('*', function (req, res) { 
    res.status(404).send('404!'); 
}); 

Но я не знаю, как обращаться маршрут app.get ('/ аутентификации/*', ...) - предыдущая модификация заменит URL и это маршрут никогда не будет называться ..

Это утверждение заставляет меня думать, что вы пытаетесь как-то обработать запрос после статической промежуточное Экспресса было вызвано. Это невозможно: статическое промежуточное программное обеспечение обслуживает статические файлы, и после этого вы не можете выполнять дополнительную логику, но вы можете запускать все это раньше! Обратите внимание, что в моем коде промежуточное программное обеспечение авторизации будет запущено до отправки статического файла.

Смежные вопросы