Comment faire pour désactiver Django validation CSRF?
J'ai commenté csrf processeur de middleware et de lignes dans settings.py
:
122
123 TEMPLATE_CONTEXT_PROCESSORS = (
124 'django.contrib.auth.context_processors.auth',
125 # 'django.core.context_processors.csrf',
126 'django.core.context_processors.request',
127 'django.core.context_processors.static',
128 'cyathea.processors.static',
129 )
130
131 MIDDLEWARE_CLASSES = (
132 'django.middleware.common.CommonMiddleware',
133 'django.contrib.sessions.middleware.SessionMiddleware',
134 # 'django.middleware.csrf.CsrfViewMiddleware',
135 'django.contrib.auth.middleware.AuthenticationMiddleware',
136 'django.contrib.messages.middleware.MessageMiddleware',
137 'django.middleware.locale.LocaleMiddleware',
138 # Uncomment the next line for simple clickjacking protection:
139 # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
140 )
Mais quand j'utilise Ajax pour envoyer une demande, Django toujours répondre "jeton csrf est incorrect ou manquant", et après l'ajout de X-CSRFToken têtes, la demande serait de réussir.
Ce qui se passe ici ?
- Double Possible : stackoverflow.com/questions/1650941/...
Vous devez vous connecter pour publier un commentaire.
Si vous avez juste besoin de quelques points de vue à ne pas utiliser CSRF, vous pouvez utiliser
@csrf_exempt
:Vous pouvez trouver plus d'exemples et d'autres scénarios ici:
@csrf_exemp
œuvres que j'ai utilisé récemment sans problèmes. J'espère que vous trouverez la réponse.Pour désactiver CSRF pour la classe des vues basées sur les éléments suivants travaillé pour moi.
À l'aide de django 1.10 et python 3.5.2
La réponse pourrait être inapproprié, mais j'espère que cela vous aide à
Avoir middleware comme cela vous aidera à déboguer des demandes et de vérifier csrf dans les serveurs de production.
Pour Django 2:
Que le middleware doit être ajouté à
settings.MIDDLEWARE
le cas échéant (dans vos paramètres de test, par exemple).Remarque: le réglage n'est pas appelé
MIDDLEWARE_CLASSES
plus.Dans
setting.py
dans le MIDDLEWARE, vous pouvez simplement supprimer/mettre cette ligne en commentaire:Si vous voulez la désactiver au niveau Mondial, vous pouvez écrire une coutume middleware, à l'instar de ce
puis ajouter cette classe
youappname.middlewarefilename.DisableCsrfCheck
àMIDDLEWARE_CLASSES
listes, avant dedjango.middleware.csrf.CsrfViewMiddleware
Le problème ici est que SessionAuthentication effectue sa propre validation CSRF. C'est pourquoi vous obtenez le CSRF manquant erreur, même lorsque le CSRF Middleware est commenté.
Vous pouvez ajouter @csrf_exempt pour chaque vue, mais si vous souhaitez désactiver CSRF et ont une authentification de session pour l'ensemble de l'application, vous pouvez ajouter un middleware comme ce -
J'ai créé cette classe dans myapp/middle.py
Puis importer ce middleware dans Middleware dans settings.py
Qui fonctionne avec DRF sur django 1.11
CSRF peut être appliquée au niveau de la vue, qui ne peut pas être désactivé à l'échelle mondiale.
Dans certains cas, c'est une douleur, mais euh, "c'est pour la sécurité". Dois conserver les notations AAA.
https://docs.djangoproject.com/en/dev/ref/csrf/#contrib-and-reusable-apps