CSRF mit Django, React + Redux mit Axios

Dies ist ein Bildungsprojekt, nicht für die Produktion. Ich hatte nicht die Absicht, mich als Teil davon anzumelden.

Kann ich mit einem CSRF-Token POST-Anrufe bei Django tätigen, ohne dass Benutzer angemeldet sind? Kann ich das tun, ohne jQuery zu verwenden? Ich bin hier überfordert und bringe mit Sicherheit einige Konzepte in Einklang.

Für die JavaScript-Seite fand ich diese redux-csrf package. Ich bin mir nicht sicher, wie ich es mit meinem @ kombinieren soPOST action using Axios:

export const addJob = (title, hourly, tax) => {
  console.log("Trying to addJob: ", title, hourly, tax)
  return (dispatch) => {
    dispatch(requestData("addJob"));
    return axios({
      method: 'post',
      url: "/api/jobs",
      data: {
        "title": title,
        "hourly_rate": hourly,
        "tax_rate": tax
      },
      responseType: 'json'
    })
      .then((response) => {
        dispatch(receiveData(response.data, "addJob"));
      })
      .catch((response) => {
        dispatch(receiveError(response.data, "addJob"));
      })
  }
};

uf der Django-Seite habe ich gelesen,diese Dokumentation auf CSRF undDie on Arbeitet im Allgemeinen mit klassenbasierten Ansichten.

Hier ist meine Sicht bisher:

class JobsHandler(View):

    def get(self, request):
        with open('./data/jobs.json', 'r') as f:
            jobs = json.loads(f.read())

        return HttpResponse(json.dumps(jobs))

    def post(self, request):
        with open('./data/jobs.json', 'r') as f:
            jobs = json.loads(f.read())

        new_job = request.to_dict()
        id = new_job['title']
        jobs[id] = new_job

        with open('./data/jobs.json', 'w') as f:
            f.write(json.dumps(jobs, indent=4, separators=(',', ': ')))

        return HttpResponse(json.dumps(jobs[id]))

Ich habe versucht, mit dercsrf_exemptDekorateur, nur um sich im Moment keine Sorgen machen zu müssen, aber so funktioniert das anscheinend nicht.

Ich habe hinzugefügt{% csrf_token %} zu meiner Vorlage.

Das ist meingetCookie -Methode (aus Django-Dokumenten gestohlen):

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 = cookies[i].trim();
            // 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;
}

Ich habe gelese dass ich die Axios CSRF-Informationen ändern muss:

var axios = require("axios");
var axiosDefaults = require("axios/lib/defaults");

axiosDefaults.xsrfCookieName = "csrftoken"
axiosDefaults.xsrfHeaderName = "X-CSRFToken"

Wo stecke ich das eigentliche Token, den Wert, den ich durch den Aufruf von @ erhaltgetCookie('csrftoken')?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage