Django
CSRF 토큰 오류
kyeongjun-dev
2021. 12. 21. 15:54
에러 내용
django 에서 DEBUG 옵션을 True로 둔 뒤, POST 요청을 보내면 아래와 같이 에러 내용이 출력된다.
1. 웹 브라우저에서 접속 시 403 error
CSRF verification failed. Request aborted
2. django log
Forbidden (Referer checking failed - https://kkjnginx.link/api/upload/ does not match any trusted origins.): /api/upload/
문제 해결을 위한 발자취
1. 처음엔 template에 csrf_token 태그를 안넣어줬나 봤더니 이미 넣어준 상태였다.
{% block content %}
<h2>Upload Image</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<button type="submit">Upload Image</button>
</form>
{% endblock %}
2. 토큰 전송이 안되는지를 확인했는데 그것도 아니었다.
3. except 데코레이터를 추가하면 된다고 했지만, 좋은 방법은 아닌거 같아서 시도해보지 않았다.
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt)
def some_view(request):
...
4. settings.py 미들웨어 주석처리 또한 좋은 방법이 아닌거 같아서 시도하지 않았다.
해결 방법
1. CSRF_TRUSTED_ORIGINS 에 호스트네임을 추가해서 해결했다. - 링크
ALLOWED_HOSTS = ['django']
CSRF_TRUSTED_ORIGINS = ['kkjnginx.link']