Get JQuery requests to play nicely with AngularJS CSRF convention
Decided to write this quick post for anyone searching on this topic. AngularJS has it’s own convention for CSRF (Cross Site Request Forgery) protection but in some cases you’ll be calling these same server side services via JQuery so you might need to get JQuery requests to also follow Angular’s convention.
For information about Angular’s CSRF protection see the “Security Considerations” part of Angular’s $http documentation.
Luckily it’s pretty darn easy to get JQuery to follow this convention too and this will also work with 3rd party plugins that use JQuery for requests like Blueimp file uploader. The easiest way to get this done is to set the global JQuery $.ajax rules. Probably the best place to do this is in your Angular app.run statement:
app.run(function ($cookies) { //This sets the default jquery ajax headers to include our csrf token, we // need to user the beforeSend method because the token might change // (different for each logged in user) $.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("X-XSRF-TOKEN", $cookies["XSRF-TOKEN"]); } }); });
That’s it!
It’s important to note to set the header using beforeSend, if you just set $.ajax options ‘headers’ section directly that means the header cannot be dynamic – which you’ll probably want if you have users logging in/out.