繁体   English   中英

Django DRF-如何使用令牌身份验证进行CSRF验证

[英]Django DRF - How to do CSRF validation with token authentication

我正在使用Django和Django Rest Framework开发REST API。 在前端,我有AngularJs应用程序。 我已经为API使用令牌身份验证。 这将禁用CSRF检查。

我想通过REST API保持CSRF验证。 如何实现呢?

我应该如何获取CSRF令牌值,以便可以使用我的角度应用程序的拦截器将其设置到每个POST请求的标头中。

我的app.js中有此配置。 应该做的把戏!

app.config(function($httpProvider) {
   $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
   $httpProvider.defaults.xsrfCookieName = 'csrftoken';
   $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});

当我开始将Angular 1.x与Django和DRF结合使用时,我遇到了同样的问题,然后在我认为的书中找到了此代码段,对我来说很好用。 在导入任何JavaScript之前,将此文件包含在base.html文件或主html文件中,一切将顺利进行,您可以开始与后端通信了。

 // Place at /static/js/csrf.js // CSRF helper functions taken directly from Django docs function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); function csrfSafeMethod(method) { // these HTTP methods do not require CSRF protection return (/ ˆ (GET|HEAD|OPTIONS|TRACE) $ /.test(method)); } $.ajaxSetup({ beforeSend: function (xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM