2016-02-03 9 views
0

У меня проблема с проверкой CSRF, хотя я использую csrf_exempt decorator (через вспомогательный mixin).Django RedirectView «Недостаток или неверный токен CSRF».

Вот мой код:

class CSRFExemptMixin(object): 
    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(CSRFExemptMixin, self).dispatch(request, *args, **kwargs) 

class IndexRedirectView(RedirectView, CSRFExemptMixin): 
    permanent = False 

    def get_redirect_url(self, *args, **kwargs): 
     if self.request.user.visit_count >= 5: 
      return reverse('gift-shop') 
     if len(BaseGiftableInstance.objects.filter(giving_user=self.request.user)) > 0: 
      # has won something 
      return reverse('gift-shop') 
     return reverse('spinner') 

Это холст приложение Facebook.

+1

Порядок наследования имеет значение, я бы попробовал 'class IndexRedirectView (CSRFExemptMixin, RedirectView)' – LostMyGlasses

+0

Спасибо. Теперь проблема проверки CSRF не возникает. Но теперь я получаю пустой экран. Перенаправление не работает. –

+0

Хм. Думаю, я нашел проблему. Это связано с перенаправлением с URL-адреса «https: //» на URL «http: //». –

ответ

2

В вопросах порядка наследования, вы должны заменить

class IndexRedirectView(RedirectView, CSRFExemptMixin) 

с

class IndexRedirectView(CSRFExemptMixin, RedirectView) 

В первом случае, 'RedirectView s dispatch() метод вызывает' s один IndexRedirectView, который не имеет декодер csrf_exempt, и это приводит к сбою проверки CSRF.

Смежные вопросы