2015-07-21 1 views
0

У меня есть простой запрос AJAX, который нуждается в маркер CSRF для каждого вызова и я определить его следующим образом:Как я могу установить по умолчанию параметров в ngResource быть POST

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-геттер во все мои звонки. Также я относительно новичок в AngularJS, поэтому простой ответ будет замечательным!

+1

Вы можете просто создать оболочку ресурса. – Rob

ответ

0

Существует простой способ для этого в угловом режиме: установить имя и имя заголовка xsrf по умолчанию в конфигурационном модуле.

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'}; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^