我正在使用 Angular.js 通过 Restangular 构建客户端应用程序。 问题是,我使用 wsse header 实现了摘要身份验证,我必须在每次向 REST 服务器发出请求时生成该 header 。
我看到 Restangular 提供了一个函数:addFullRequestInterceptor()。
所以现在,我尝试在 RestangularProvider 中使用它,并在此文件 Restangular.js 中对其进行配置:
// Config Restangular
app.config(function(RestangularProvider) {
RestangularProvider.setBaseUrl(applicationConfig.SERVER_URL);
RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
RestangularProvider.addFullRequestInterceptor(
function (element, operation, route, url, headers, params, httpConfig) {
// Here is my header generation.
$http.defaults.headers.common['X-WSSE'] =
TokenHandler.getCredentials(
AuthHandler.authentication.user.username,
AuthHandler.authentication.secret);
return {
element: element,
headers: headers,
params: params,
httpConfig: httpConfig
};
});
});
但是我遇到了注入(inject)问题,我无法找出如何注入(inject)我的 TokenHandler 服务和我的 AuthHandler 服务以便能够知道用户是否已经登录以及他是否已经登录是否本地存储。
感谢您的帮助;)
最佳答案
问题在于,在 .config
阶段,诸如 AuthHandler
和 TokenHandler
等服务尚未实例化,因此您需要实例化它们(及其依赖项)手动使用 $injector
(可注入(inject)到 config
block 中):
app.config(function(RestangularProvider,
$injector,
AuthHandlerProvider,
TokenHandlerProvider) {
var AuthHandler = $injector.instantiate(AuthHandlerProvider.$get);
var TokenHandler = $injector.instantiate(TokenHandlerProvider.$get);
//...
});
关于javascript - 如何注入(inject)服务来监控身份验证和存储状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083511/