Безопасные маршруты и шаблоны со стеком MEAN?

(ВНИМАНИЕ! NOOB ALERT! Просто переход от Microsoft к MEAN)

У кого-нибудь есть пример надежного шаблона для использования разных маршрутов/макетов/шаблонов со стеком MEAN для общедоступных и частных областей? Я экспериментировал с вложенными контроллерами, но это вызывает вопросы с маршрутами. Я также предпочел бы НЕ дублировать все маршруты как в Express, так и в клиентском приложении. В идеальном сценарии некоторые относительные папки следует считать «личными», а другие — «общедоступными» с различным макетом (оболочкой) для каждой области. Пользователи, не прошедшие проверку подлинности, должны находиться в общедоступной зоне.

В мире без SPA/MS все поддерживается на стороне сервера. Есть определенный комфорт в защите файлов, предварительном рендеринге и тому подобном. Из-за этого я замечаю искушение строить области с помощью Jade, вероятно, больше, чем следовало бы. Даже когда я пишу это, я начинаю чувствовать, что ничто, видимое клиентом, не должно быть на стороне сервера, за исключением начального макета и индекса при использовании приложения Node для маршрутизации, маршалинга данных и защиты самих маршрутов.

Примечание. В настоящее время для аутентификации используется Passport.

Заранее спасибо за ваше время и подробные ответы.


person Fred Lackey    schedule 23.11.2014    source источник


Ответы (1)


Просто быстрая мысль:

Подавайте свои части через получение маршрутов с определенными папками. Например, у вас может быть общедоступная и защищенная папка в папке частей.

-app
  --partials
    ---public
    ---protected

Затем добавьте промежуточное ПО аутентификации на защищенный маршрут.

для незащищенного:

app.get( '/partials/public/*', function(){ //send partial html here } )

защищено:

app.get( '/partials/protected/*', passport.authenticate, function(){ //same as above } )


Наконец, в вашем угловом приложении (которое, надеюсь, вы установили свои шаблонные URL-адреса соответствующим образом), добавьте httpInterceptor, чтобы проверить, является ли ответ ошибкой 401, и если да, перенаправьте на страницу входа -> найти здесь: Благодарности Фредрику Накстаду. Вот важный фрагмент

var interceptor = ['$location', '$q', function($location, $q) {
    function success(response) {
        return response;
    }

    function error(response) {

        if(response.status === 401) {
            $location.path('/login');
            return $q.reject(response);
        }
        else {
            return $q.reject(response);
        }
    }

    return function(promise) {
        return promise.then(success, error);
    }
}];

$httpProvider.responseInterceptors.push(interceptor);


Это позволит вам предоставить angular доступ к статическому контенту, сохраняя при этом контроль над тем, что обслуживается. Надеюсь, это будет полезно.

person leedotpang    schedule 10.12.2014