1

我正在使用http-auth-interceptor进行身份验证。在http-auth-interceptor中,我使用如下方式登录:

        var data = 'username=' + encodeURIComponent(user.userId) + '&password=' + encodeURIComponent(user.password);
        $http.post('api/authenticate', data, {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            ignoreAuthModule: 'ignoreAuthModule'
        })

ignoreAuthModule用于告诉ignoreAuthModule身份验证拦截器将忽略此登录方法。

现在,我对 $resource 有一些要求,例如:

.factory('SomeDataService', function ($resource) {
    return $resource('api/some/data', {}, {
       'get': { method: 'GET'}
    });
})

I wantSomeDataService.get()也被 auth 拦截器忽略,因为我需要自己控制 401 错误。

所以,我的问题是,有没有什么方法可以让我在 $http.xml 中设置类似的配置。

[根据评论更新] 我听了这个login-required活动:

    $rootScope.$on('event:auth-loginRequired', function (rejection) {
        $log.log(rejection);
        // I need to get the request url and for some specific url, need to do something.
        $rootScope.loginPopup();
    });

但是“拒绝”参数没有我需要的请求上下文数据。我需要获取请求 url 并检查,对于某些指定的 url,我需要做一些事情。

4

2 回答 2

1

在检查了 ngResource 的文档后,我得到了如下解决方案:

.factory('SomeDataService', function ($resource) {
    return $resource('api/some/data', {}, {
       'get': { method: 'GET', ignoreAuthModule: 'ignoreAuthModule'}
    });
})

只需添加上面的配置项。这将是等效的广告:

$http.post('api/some/data', data, {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        ignoreAuthModule: 'ignoreAuthModule'
    })
于 2016-03-14T09:20:48.840 回答
0

ngResource 模块是建立在 $http 之上的。因此无法在 $resource 中配置您可以使用 $http 做的所有事情。我认为下面的链接将引导您对$http 和 $resource有一个清晰的了解

于 2016-03-10T07:29:43.877 回答