Я использую Django Rest Framework для создания webapp с регистрацией пользователя/логином. Я пытаюсь освободить пользовательский вид регистрации от необходимости наличия токена CSRF. Это то, что мой взгляд выглядит прямо сейчас:Django csrf_exempt не работает с SessionAuthentication
class UserSignUpView(generics.CreateAPIView):
permission_classes = [] # FIXME: doesn't seem to be working
serializer_class = UserSerializer
@method_decorator(csrf_exempt)
def post(self, request, *args, **kwargs):
super().post(self, request, *args, **kwargs)
def get_permissions(self):
if self.request.method == 'POST':
return (permissions.AllowAny(), TokenHasReadWriteScope())
return False
Мой settings.py выглядит следующим образом:
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
}
Я все еще получаю это на моем выходе серверной Forbidden (CSRF cookie not set.): /users/
и в переднем конце классического CSRF verification failed. Request aborted.
Почему бы не работать? Может ли это иметь какое-то отношение к тому, что я никогда не устанавливал cookie CSRF вручную?
get_permissions не нуждается в декораторе csrf_exempt? Вы используете метод POST. Вы можете написать @csrf_exempt: [Документация] (https://docs.djangoproject.com/en/1.10/ref/csrf/#django.views.decorators.csrf.csrf_protect) – Wilfried
Вы также можете увидеть [этот пост] (http : //stackoverflow.com/questions/17716624/django-csrf-cookie-not-set) – Wilfried
@Wilfried Я попробовал добавить '@method_decorator (csrf_exempt)' в начало 'get_permissions', но без изменений –