我有一个页面angularjs应用程序利用JWT身份验证。由于JWT是随每个请求一起发送的,因此在我的表单中使用CSRF令牌似乎是多余的。为了禁用CSRF检查,我在settings.py中间件类中注释了'django.middleware.csrf.CsrfViewMiddleware'。这一切工作正常。如何忽略发送给Django REST框架的CSRF令牌?
但是,当我使用Django管理面板时,使用了CSRF。这似乎是合理的,因为JWT不保护管理页面。
当我登录到Admin时,会设置一个包含CSRF令牌的cookie。当我尝试在登录到Admin会话期间从我的angularjs应用程序POST到REST端点时,请求包含CSRF cookie,并且Django REST后端以403状态拒绝POST。如果我从浏览器设置中删除cookie并重新POST,则按预期进行。
我可以配置我的应用程序不设置CSRF Cookie,但如何配置我的应用程序忽略CSRF cookie,如果它是由同一域上的另一个应用程序设置的?我无法保证令牌不会由其他内容设置,因为我无法控制将在域中运行的所有应用程序。
我正在使用在Django REST框架中扩展视图集的基于类的视图。我试图通过用csrf_exempt装饰我的类来解决这个问题,但这似乎不起作用(仍然得到403响应)。我可以做错了,还是有一些其他的解决方案,我失踪了?
这是我在csrf_exempt尝试:
class AccountList(generics.ListCreateAPIView):
serializer_class = serializers.AccountSerializer
def get_queryset(self):
return models.Account.objects.all()
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super(AccountList, self).dispatch(*args, **kwargs)
[Django Rest Framework删除csrf]的可能重复(http://stackoverflow.com/questions/30871033/django-rest-framework-remove-csrf) – user3467349 2016-05-26 06:52:37