Django 重定向视图 "CSRF token missing or incorrect."
Django RedirectView "CSRF token missing or incorrect."
我遇到了 CSRF 验证问题,即使我正在使用 csrf_exempt 装饰器(通过辅助混合)。
这是我的代码:
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 canvas 应用。
由于继承顺序很重要,您应该替换
class IndexRedirectView(RedirectView, CSRFExemptMixin)
和
class IndexRedirectView(CSRFExemptMixin, RedirectView)
在第一种情况下,IndexRedirectView
的 dispatch()
方法调用了 RedirectView
的方法,它没有 csrf_exempt
装饰器,这会导致CSRF 验证失败。
我遇到了 CSRF 验证问题,即使我正在使用 csrf_exempt 装饰器(通过辅助混合)。
这是我的代码:
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 canvas 应用。
由于继承顺序很重要,您应该替换
class IndexRedirectView(RedirectView, CSRFExemptMixin)
和
class IndexRedirectView(CSRFExemptMixin, RedirectView)
在第一种情况下,IndexRedirectView
的 dispatch()
方法调用了 RedirectView
的方法,它没有 csrf_exempt
装饰器,这会导致CSRF 验证失败。