Хотите отключить CSRF в openx для одного конкретного почтового запроса - PullRequest
0 голосов
/ 16 апреля 2019

В opensx я использовал Xblock.json_handler для стороннего потребления API.Но я хочу отключить аутентификацию csrf для этого поста API, кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 16 апреля 2019

Есть много способов сделать это. Но имейте в виду, что вы не можете отключить CSRF на глобальном уровне, если не нравится создавать свое собственное промежуточное программное обеспечение. см. документацию

1.) С использованием метода csrf_exempt

Если вы хотите, чтобы некоторые представления не использовали CSRF, вы можете использовать @ csrf_exempt . Добавьте @ csrf_exempt к каждому представлению, которое вы хотите отключить

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
    return 'CSRF is disabled for this view'

2.) Использование настроек setting.py

В setting.py в MIDDLEWARE вы можете просто удалить / прокомментировать эту строку кода:

'django.middleware.csrf.CsrfViewMiddleware',

Просто помните, что SessionAuthentication выполняет свою собственную проверку CSRF. и это приведет к ошибке CSRF отсутствует если закомментировано при использовании sessionAuthentication ..

3.) Creating your own Custom Middleware

Чтобы отключить CSRF в Global, вы можете написать собственное промежуточное программное обеспечение, например,

from django.utils.deprecation import MiddlewareMixin

class DisableCsrfCheck(MiddlewareMixin):

    def process_request(self, req):
        attr = '_dont_enforce_csrf_checks'
        if not getattr(req, attr, False):
            setattr(req, attr, True)

затем добавьте этот класс

yourApp_name.middlewarefilename.DisableCsrfCheck

до

MIDDLEWARE_CLASSES lists

до

 django.middleware.csrf.CsrfViewMiddleware
...