Реагировать на вызов Django API CSRF - PullRequest
0 голосов
/ 17 ноября 2018

Эй, ребята,

Я делаю реакцию внешнего интерфейса, которая называется API Джанго. У меня есть большая проблема: я хочу вызвать Django API с реактивом, но API нужен csrf, и я не представляю, как я могу получить этот csrf. После просмотра интернета я увидел, как некоторые люди используют функцию, которая говорит, что django API нужен маршрут, который запускает токен. Я полностью потерян.

мой диссонанс, если нужно Вади # 1916

1 Ответ

0 голосов
/ 17 ноября 2018

Вот хороший пост о том, как это сделать.

Основные моменты:

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]);
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

Затем вы можете использовать его с извлечением:

  fetch(url, {
    credentials: 'include',
    method: 'POST',
    mode: 'same-origin',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'X-CSRFToken': getCookie('csrftoken')
    },
    body: {}
   })
  }

Очевидно, что использовать axios намного проще:

import axios from 'axios';

axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'

Возможно, вам также понадобится убедиться, что токен csrf отправляется клиенту в представлении, которое отображает данные.

from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def your_view(request):
    ...
...