我的Angular应用程序中有一项服务,负责授权用户并返回auth令牌。
但是,由于$ http的异步特性,我无法正确隔离我的服务逻辑。相反,我必须返回一个承诺并推动将响应解释为服务调用者的逻辑(单一责任红旗)。
鉴于此,这让我重新考虑我是否正确地思考这个问题。我来自一个Java世界,大多数交互是同步的,所以当我尝试构建一个单一责任的简洁设计时,某些东西并不适合我。
我在这里缺少什么?
更新 我意识到下面的内容不会按预期工作,但我想到了我至少可以这样做:
app.service('AuthenticationService', ['$http', '$httpParamSerializerJQLike', function($http, $httpParamSerializerJQLike)
{
this.authServerBaseURL = "...";
this.clientId = "...";
this.authenticate = function(username, password)
{
var config =
{
headers:
{
"Content-Type" : 'application/x-www-form-urlencoded',
"Authorization" : "Basic " + btoa(this.clientId + ":")
}
}
var body = $httpParamSerializerJQLike(
{
grant_type : "password",
username : username,
password : password
});
return $http.post(this.authServerBaseURL + '/oauth/token', body, config).
success(function(data, status, headers, config)
{
return data.access_token;
}).
error(function(data, status, headers, config)
{
return false;
});
}
}]);