AngularJS $ resource - 使用用户名/密码设置自定义标头?

时间:2016-05-07 19:58:09

标签: angularjs header resources

我想为我的登录系统创建一个新的REST方法,我在自定义标头中提供用户凭据。我怎样才能使用AngularJS / ng-resource?我尝试过以下代码,但问题是当我尝试从表单($ scope.vm.username)获取用户名/密码时。这给了我“未定义的”#39;如果我在标题设置中这样做。

angular.module('BkSystemApp.controllers', ['ngResource'])

.controller('LoginController', function($scope, $location, $resource){
    //init
    $scope.vm = {};

    function getUserCredentials(){
        return ($scope.vm.username + ':' + $scope.vm.password)
    }

    //resources
    var Authentication = $resource('/users/authentication',{},{
        login:{
            method: 'GET',
            isArray: false,
            headers: {'Authentication':btoa(getUserCredentials())}
        }
    });

    //HTTP methods
    $scope.login = function(){
        Authentication.login(function(data){

        });     
    };
})

1 个答案:

答案 0 :(得分:0)

要让$resource .login方法在方法调用时计算头字符串,标头配置需要一个头属性,其值为函数声明,而不是函数调用。 / p>

 //resources
var Authentication = $resource('/users/authentication',{},{
    login:{
        method: 'GET',
        isArray: false,
        //USE function declaration
        headers: {
           'Authentication': 
                function () {
                    return btoa(getUserCredentials())
                }
        }
        //NOT function invocation
        //headers: {'Authentication':btoa(getUserCredentials())}
    }
});

这样,每次调用Authentication方法时都会计算login值。

注意:在XHR GET请求的标头中发送用户名和密码是不明智的。