簡體   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