我正在尝试创建一个从web api获取令牌然后与多个控制器共享该令牌的工厂。我已尽力创建工厂并将其注入控制器,但我不确定我是否正确执行此操作?我找到了一个有角色的,未知的提供商'错误。请指教,新到棱角分明。谢谢。
securityApp.factory('getToken', function ($scope, $http) {
var token = "";
$http({
method: 'POST', url: 'http://localhost:62791/token', data: { username: $scope.userName, password: $scope.password, grant_type: 'password' }, transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
}).success(function (data, status, headers, config) {
token = data.access_token;
return token;
});
});
securityApp.controller('membersController', function ($scope, $http, getToken) {
$http({ method: 'GET', url: '/api/Members/?access_token=' + getToken.token, headers: { 'Authorization': 'Bearer ' + getToken.token } })
.then(function (response) {
$scope.members = response.data;
});
});
答案 0 :(得分:1)
无法使用$scope
注入服务。只有控制器才能。可以在服务中注入的唯一范围是$rootScope
。调用时,您需要将用户名和密码传递给您的服务。它无法从任何地方下注用户名和密码。
PS:当您询问错误时,请发布完整且准确的错误消息。
答案 1 :(得分:1)
你的工厂没有退货(Read this)。它应该是这样的
securityApp.factory('getToken', function ($scope, $http) {
return {
getAccessToken: function () {
$http({
method: 'POST', url: 'http://localhost:62791/token', data: { username: $scope.userName, password: $scope.password, grant_type: 'password' }, transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
}).success(function (data, status, headers, config) {
return data.access_token;
});
},
};
});
并在您的控制器中调用它,如下所示。
securityApp.controller('membersController', function ($scope, $http, getToken) {
$scope.token = getToken.getAccessToken();
$http({ method: 'GET', url: '/api/Members/?access_token=' + $scope.token, headers: { 'Authorization': 'Bearer ' + $scope.token } })
.then(function (response) {
$scope.members = response.data;
});
});
<强>更新强> 要解决错误:“错误:[$ injector:unpr]未知提供程序更改代码
securityApp.controller('membersController', ['$scope', '$http','getToken', function ($scope, $http, getToken) {
$scope.token = getToken.getAccessToken();
$http({ method: 'GET', url: '/api/Members/?access_token=' + $scope.token, headers: { 'Authorization': 'Bearer ' + $scope.token} })
.then(function (response) {
$scope.members = response.data;
});
}]);