0
votes

Comment puis-je résoudre l'échec de la vérification CSRF

J'essaie de créer un formulaire qui télécharge un fichier zip sur le serveur. Mais chaque fois que je clique sur la soumission, je continue à obtenir la vérification CSRF a échoué erreur. Ceci est mon code HTML: xxx

dans mon code .js: xxx


2 commentaires

Avez-vous essayé d'ajouter {{csrf_token}} comme ceci {{ csrf_token}} et non à l'extérieur de votre formulaire.


Oui mais je continue à obtenir la même erreur. Interdit.


4 Réponses :


0
votes

{% csrf_token%} code> est champ de saisie caché non a valeur code>

dans html p> xxx pré> JS P>

let csrfToken = $("#csrf_token").val();
var json_data = {'csrfmiddlewaretoken' : csrfToken, 'file': formData };


0 commentaires

0
votes

Avez-vous essayé avec le CSRF basé sur le cookie fourni par Django Doc? xxx

Ajoutez 'csrfmiddlewaretank': csrftoken, dans You JSON_DATA < / p>


0 commentaires

0
votes

La meilleure approche est probablement celle décrite dans Django Documentation: Demande de site croisée Protection contrefusion

Si votre CSRF_USESESSIONS CODE> et CSRF_COOKIE_HTTPONLY CODE> Les paramètres sont false code>, je vous suggère de créer init.js code> fichier et le chargez toujours dans votre modèle HTML de base. Incluez ces deux fonctions dans ce fichier: p> xxx pré>

Pour inclure le jeton CSRF dans vos demandes AJAX, vous l'incluez dans les en-têtes de demande avec ce code: P>

var csrftoken = $("[name=csrfmiddlewaretoken]").val();
$.ajax({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    },
    url: ...
    ...
    ...
});


0 commentaires

0
votes

Une solution simple consiste à utiliser S'assurer_csrf_cookie dans la vue qui rend la page. Important, le décorateur doit être en vue qui rend la page, Pas dans la vue qui reçoit la requête post . XXX


3 commentaires

Êtes-vous sûr de l'état d'importation?


Nope, c'était une erreur de copie et de pâte, j'ai édité la réponse


Merci. Je l'ai essayé mais je continue à obtenir la même erreur interdite.