Я начинаю экспериментировать с ExpressJS + AngularJS, и я столкнулся со стрессовой ситуацией.Ограничение доступа ко всем маршрутам, кроме одного
Моя цель - иметь одну страницу входа и одну страницу панели управления и использовать Passport + MongoDB. Я аутентифицирую пользователя и, если учетные данные верны, перенаправляет его на страницу панели мониторинга.
Я начал с angular-express-seed и модифицирован так я закончил с ранее упомянутыми видами:
$routeProvider.
when('/login', {
templateUrl: 'partials/login',
controller: 'LoginCtrl'
}).
when('/dashboard', {
templateUrl: 'partials/dashboard',
controller: 'DashboardCtrl'
}).
otherwise({
redirectTo: '/login'
});
Я подаю каждый частичный вид с:
app.get('/partials/:name', routes.partials);
exports.partials = function (req, res) {
var name = req.params.name;
res.render('partials/' + name);
};
Войти системы работает правильно, за исключением той части, что я могу получить непосредственно на панели управления (без входа вообще).
Поэтому, я думаю, мне нужно выяснить, есть ли у пользователя аутентификация, прежде чем предоставить ему доступ к панели управления (или любой другой области, если на то пошло).
Я нашел, что делает трюк:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
, и я бы назвал это на каждом GET
к частичному
app.get('/partials/:name', ensureAuthenticated, routes.partials);
большой проблемой здесь является то, что вид Войти также частичный , и я не хочу, чтобы ensureAuthenticated
выполнялся, когда запрашивается представление.
В настоящее время при вызове ensureAuthenticated
при каждом частичном запросе происходит сбой любого браузера, никаких ошибок.
То, что я пытался до сих пор (и не работают):
function ensureAuthenticated(req, res, next) {
if (req.route.params.name !== 'login' && req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
попытался также вызова вид входа в систему со своим собственным app.GET
и не используя ensureAuthenticated
но как-то Угловая переворачивается от и не даже нагрузки.
Любые идеи о том, как разрешить это?
Заранее спасибо.
добавление app.get ('/ partials/login', routes.partials); и проверка проверки параметров имени. Тем не менее у меня проблема, я зашел в систему и перешел на свою панель инструментов, затем я очищаю сессионный файл cookie и обновляюсь, чтобы узнать, перенаправляется ли он на/login. Он показывает окно входа в систему, но URL-адрес все еще говорит о своей панели управления, любая идея, почему? – mfreitas
Итак, он показывает окно входа в систему, потому что я вернул его в обработчик/login. Не должен res.redirect ('/ login'); перенаправить? вместо этого он переходит к моему app.get ('/ login', routes.login); и возврат res.render ('partials/login'); – mfreitas
@mfreitas перенаправление отправляется во время вызова AJAX, потому что Angular запрашивает частичное. Таким образом, вызов AJAX перенаправляется, а не URL главной страницы. – robertklep