在角度资源中添加配置

时间:2016-03-10 07:03:27

标签: angularjs angular-resource angular-http-auth

我使用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 auth拦截器将忽略此登录方法。

现在,我有一些使用$ resource的请求,例如:

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

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

所以,我的问题是,对于ngResource有什么办法,我可以在$ http中设置配置。

[根据评论更新] 我听过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();
    });

但'rejection'参数没有我需要的请求的上下文数据。我需要获取请求URL并检查,对于某些指定的URL,我需要做一些事情。

2 个答案:

答案 0 :(得分: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'
    })

答案 1 :(得分:0)

ngResource模块构建在$ http.Hence之上,不可能在$ resource中配置你可以用$ http做的所有东西。我认为以下链接将指导你清楚地了解{{ 3}}