2015-07-21 26 views
0

我有一个需要CSRF令牌每次调用一个简单的AJAX请求,我定义它,像这样:我怎么可以在ngResource设置的默认参数去进行后期

app.factory('auth', ['$resource', '$cookies', function($resource, $cookies){ 

    var getCsrf = function() { 
     //get csrf token from cookie 
    }; 

    return { 
     login: $resource('auth/login', {}, { 
       'q' : { 
        method: 'POST', 
        params: {csrf_token: getCsrf()} 
       } 
      }), 
     // ... some more requests 
    }; 
}]); 

我的理解它,你可以指定默认url参数作为第二参数的$resource() -call,在我的情况下是空对象{}。显然,我在params: ...下配置对象中设置的数据也通过GET发送,而不是通过指定的POST方法发送。

一种方法是手动将csrf_token放在我要调用api函数的地方,但我想保持它干净。有没有办法告诉哪些方法用于默认参数?所以我可以简单地使用..

auth.login.q(email, password, ...).then(...); 

..不必在我所有的调用中实现csrf-getter函数。另外我对AngularJS比较新,所以一个简单的答案会很棒!

+1

您可以制作资源包装。 – Rob

回答

0

在角度上有一个简单的方法: 在配置模块中设置xsrf cookie名称和标题名称默认值。

app.config(['$httpProvider', function($httpProvider) { 
    // response cookie name 
    $httpProvider.defaults.xsrfCookieName = 'csrf_cookie'; 
    // request header name where the value of the cookie get set 
    $httpProvider.defaults.xsrfHeaderName = 'HTTP_X_XSRF_TOKEN'; 

    // to set ajax request header 
    $httpProvider.defaults.headers.common = { 'X-Requested-With' : 'XMLHttpRequest'}; 
} 
相关问题