我们希望为AngularJS应用程序(公共/私有)提供2组资源,这些资源使用RequireJS进行依赖关系管理。基本上登录页面上的所有内容都是公开的,一旦登录,将加载另一个angularjs应用程序(新的requirejs配置),这将加载需要身份验证才能访问的资源。
有没有办法在加载资源时配置requirejs来设置授权标头?
答案 0 :(得分: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
另一个更新
您也可以在不使用文本插件的情况下使用urlArgs(主要用于缓存失效):
require.config({
urlArgs: 'token='+token,
...
)}