我有一個頁面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