Я использовал приложение create-реакции-приложение в сочетании с Django Rest Framework для создания небольшого сайта.Все отлично работает, когда я использую npm start
и нажимаю API Django с одного порта на другой.Однако когда я npm build
статически реагирую на файлы и обслуживаю их из приложения Django, я получаю 403 forbidden
при достижении нескольких конечных точек.Я думаю, что это как-то связано с CSRF, но я не могу понять, что.
Я обслуживаю статические файлы из views.py
:
@api_view(['GET'])
def serve_html(request):
try:
with open(os.path.join(REACT_APP_DIR, 'build', 'index.html')) as f:
return HttpResponse(f.read())
except FileNotFoundError:
return HttpResponse(
"""
This URL is only used when you have built the production
version of the app. Visit http://localhost:3000/ instead, or
run `yarn run build` to test the production version.
""",
status=501,
)
Мой urls.py
содержитОбозначение статических файлов внизу:
urlpatterns = [
# ..all api paths
url(r'^', serve_html, name='serve_html'),
]
Я использую TokenAuthentication
и SessionAuthentication
:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
И запросы API, требующие входа пользователей, имеютследующие декораторы:
@authentication_classes((SessionAuthentication, TokenAuthentication))
@permission_classes((IsAuthenticated,))
Приложение: Я замечаю, что при запуске его из кросс-источника, нет файла cookie sessionid
(и все работает), но когда я пытаюсь хост реагироватьфайлы того же происхождения, есть файл cookie sessionid
(и возвращается 403 Forbidden
).
Извините за открытый вопрос, но я нахожусь в тупике;Я действительно не знаю, почему это не работает.