2017-01-20 22 views
0

私はDjangoとDjango Rest Frameworkを使用してREST APIに取り組んでいます。 フロントエンドにはAngularJsアプリがあります。 私はAPIにトークン認証を使用しました。これにより、CSRFのチェックが無効になります。Django DRF - トークン認証でCSRF検証を行う方法

私はCSRF検証をREST APIで保持したいと考えています。これを達成する方法は?

角度アプリケーションのインターセプタを使用して、すべてのPOST要求のヘッダーにCSRFトークン値を設定する方法を教えてください。

+0

、どのような問題あなたは解決しようとしていますか?トークン認証を使用すると、CSRFの検証が無効になる理由があります。 – knbk

+0

トークン認証を使用するREST APIの場合は、必要ありません。 – Mangesh

+0

@knbkあなたはほんの少しの理由しか言及できませんか?私は本当にそれを探しています..それは信頼できるソースからのみ送信できるユーザーのトークンをすでに検証しているからですか? –

答えて

0

app.jsにこの設定があります。トリックをする必要があります!

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

このコードを動作させるには、ブラウザにcsrf cookieを設定する必要があります。私の角型アプリはdjangoによって提供されないので、最初にこのトークンをサーバからどのように取得するのですか? – Mangesh

0

私はジャンゴとDRFとの角度の1.xを使用し始めたとき、私は同じ問題を持って、その後、私は私が考える本の中で、このコードスニペットを見つけ、それが私のために正常に動作します。 base.htmlファイルまたはメインのhtmlファイルにこのファイルを含めてJavaScriptをインポートしてください。すべてがスムーズに動作し、バックエンドとの会話が始まります。あなたはCSRFの検証を使用したくないのはなぜ

// 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); 
 
     } 
 
    } 
 
});

+0

このコードを動作させるには、ブラウザにcsrf cookieを設定する必要があります。私の角型アプリはdjangoによって提供されないので、最初にこのトークンをサーバからどのように取得するのですか? – Mangesh

関連する問題