Angular Factory与多个控制器共享web api 2令牌

时间:2014-08-24 10:05:20

标签: angularjs

我正在尝试创建一个从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;
    });

});

2 个答案:

答案 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;
});

}]);

Demo Sample