2

在我的应用程序中,身份验证正在使用angular-http-auth

当用户填写用户名/密码表单并提交时,它login()以控制器的功能为目标:

$scope.login = function() {
    var credentials = Base64.encode($scope.username + ':' + $scope.password);
    $http.defaults.headers.common['Authorization'] = 'Basic ' + credentials;

    User.login(                           // reference to the $resource service
        function() {                      // success callback
            authService.loginConfirmed(); // method of angular-http-auth
        }
    );

}

用户是使用 $resource 创建的服务

factory('User', function($resource){
    return $resource('url/to/json', 
        {}, 
        {   'login': { method: 'GET', isArray:true }
        });
})

base64 是来自这里的加密服务

这是这样工作的,但是有没有办法通过 angular-http-auth 传递凭据,而不是通过 $http 设置默认标头?

4

1 回答 1

1

这样做的问题:

$http.defaults.headers.common['Authorization'] = 'Basic ' + credentials;

是您现在正在为所有 $http 发出的请求设置“凭据”。如果您不想这样做,并且想直接通过每个 $resource 调用传递“凭据”,则可以,这就是您开始在那里做的事情。

return $resource('url/to/json', 
    {}, 
    {   'login': {
             method: 'GET',
             headers: { 'Authorization': 'Basic ' + credentials }
         }
    });

我没有尝试这个例子,但是我有类似的代码,其中方法是 POST,所以我在返回 $resource 的结果之前调用 save(),并且“登录”键是“保存”

但是由于您正在使用自定义“登录”方法进行 GET,这应该可以工作。

于 2014-03-30T21:20:32.597 回答