2015-11-11 4 views
0

Мы хотим иметь 2 набора ресурсов для нашего приложения AngularJS (public/private), которое использует RequireJS для управления зависимостями. В основном все на странице входа было бы общедоступным и после входа в систему было бы загружено другое приложение angularjs (новая конфигурация requirejs), которая будет загружать ресурсы, для которых требуется аутентификация.Могу ли я установить заголовки полномочий с RequireJS?

Есть ли способ настроить requirejs для установки заголовка авторизации при загрузке ресурсов?

ответ

0

Это зависит от того, что вы подразумеваете под «ресурсами» и как настроен ваш сервер. Но в целом - да, поскольку вы используете AngularJS, вы можете использовать $ httpProvider для инъекции услуги перехватчика.

Например, в службе:

 var dependencies = ['$rootScope', 'userService']; 

     var service = function ($rootScope, userService) { 
      return { 
       request: function(config) { 
        var currentUser = userService.getCurrentUser(); 
        var access_token = currentUser ? currentUser.access_token : null; 

        if(access_token) { 
         config.headers.authorization = access_token; 
        } 
        return config; 
       }, 
       responseError: function (response) { 
        if(response.status === 401) { 
         $rootScope.$broadcast('unauthorized'); 
        } 
        return response; 
       } 
      }; 
     }; 

     module.factory(name, dependencies.concat(service)); 

Затем, после того, как настроите маршруты, вы можете использовать:

$httpProvider.interceptors.push('someService'); 

Вы можете найти более подробную информацию о перехватчиков здесь: https://docs.angularjs.org/api/ng/service/$http#interceptors


ОБНОВЛЕНИЕ

Возможно, вы сможете использовать текстовый плагин, чтобы попытаться его получить, но я не вижу смысла защищать код на стороне клиента. Кроме того, если вы хотите использовать оптимизацию ресурсов будет просто прийти в один файл в любом случае ...

config: { 
     text: { 
      onXhr: function (xhr, url) { 
       xhr.setRequestHeader('Authorization','Basic ' + token); 
      } 
     } 
    } 

См: custom-xhr-hooks


Другой UPDATE

Вы также можете использовать urlArgs (в основном используется для недействительности кеша) без использования текстового плагина:

require.config({ 
    urlArgs: 'token='+token, 
    ... 
)} 
+0

Хехех Я уже делаю это в пределах Углового. Я имею в виду, когда requirejs загружает javascript-файл с сервера, могу ли я передавать заголовки аутентификации вместе с этими запросами файлов javascript? – SomethingOn

+0

Благодаря @Shapeshifter, защита кода на стороне клиента может показаться немного тупой, но мы просто опасаемся. Нет смысла подвергать вещи незарегистрированным пользователям, которые не нужно видеть. – SomethingOn

+0

Нет проблем, вы также можете подумать об использовании urlArgs, который не касается заголовка, но вы также сможете передать токен или что-то с этим. Если мой ответ вам подходит, отметьте его как таковой! Спасибо @SomethingOn – Shapeshifter