第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Fetch JS for Django 中添加 CSRF

在 Fetch JS for Django 中添加 CSRF

阿晨1998 2022-10-08 10:24:13
我的 django 模板中有以下 JS 代碼:fetch("http://127.0.0.1:8000/api/endpoint", {      method: "POST",      body: $("#form").serializeArray(),    }).then(function(data) {    });在 api/endpoint 中,我得到:Forbidden (CSRF token missing or incorrect.): /api/endpoint如何在 fetch 中添加 csrf 令牌?
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

我在一個(gè)類似的項(xiàng)目中遇到了幾個(gè)小時(shí)的問題。我終于找到了解決方案!我希望這個(gè)信息幫助。我正在使用的腳本不在 django 模板上,所以使用csrfmiddlewaretoken: '{{ csrf_token }}'對(duì)我不起作用。


我在"credentials": 'same-origin'上面列出的,而且還包括"X-CSRFToken": getCookie("csrftoken")了,它使用了底部包含的功能。這是我需要的第二點(diǎn)。所以你的代碼應(yīng)該是這樣的:


fetch("http://127.0.0.1:8000/api/endpoint", {

  method: "POST",

  body: $("#form").serializeArray(),

  credentials: 'same-origin',

  headers: {

      "X-CSRFToken": getCookie("csrftoken")

  }

})

.then(function(data) {

})

.catch(err => console.log(err));

然后你需要添加這個(gè)函數(shù):


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

當(dāng)然,該方法必須在同一頁面上。取自 Django 文檔。 https://docs.djangoproject.com/en/1.11/ref/csrf/#ajax


我從這篇文章中找到了這些信息: 來自用戶Ska的https://stackoverflow.com/a/43943556


查看完整回答
反對(duì) 回復(fù) 2022-10-08
?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊

在你的身體內(nèi)部,你可以像這樣在你的 ajax 請(qǐng)求中傳遞 csrf 令牌:


body : {

   // Other stuff

   csrfmiddlewaretoken: '{{ csrf_token }}'

}

這應(yīng)該可以解決您的問題。


編輯:默認(rèn)情況下,F(xiàn)etch 在其請(qǐng)求中不包含 Cookie。為此,您需要在您的 fetch 請(qǐng)求中添加這一行作為 on 選項(xiàng):


credentials : 'include' // For Cors

credentials : 'same-origin' // For same origin requests 


查看完整回答
反對(duì) 回復(fù) 2022-10-08
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

就我而言,我使用的是純 Javascript 和 Django。


我必須在我的 HTML 布局中隱藏一個(gè) {% csrf_token %} 以便我可以在我的 fetch 請(qǐng)求中訪問它,如下所示:


HTML 模板:


<head> 

  <title>Page title</title>

  {% csrf_token %}

</head>

index.js:


csrf_token = document.getElementsByName('csrfmiddlewaretoken')[0].value


fetch(`${url}`, {

        method : 'put',

        body : JSON.stringify(your_dat),

        headers: { "X-CSRFToken": csrftoken },

        credentials : 'same-origin',

    })

它可能不是最漂亮的代碼


查看完整回答
反對(duì) 回復(fù) 2022-10-08
  • 3 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)