概要
DjangoのRest APIにPOSTでリクエストを行う際にちょっとハマったので、書いておこうと思います。
問題
curlで試しにGETリクエストを行ったところ、問題なく動作するが、POSTでリクエストを行ったところcsrf tokenが無効というエラーが出た
レスポンスには明確な理由が書いてなかったので、uwsgiのログを見た
WARNING Forbidden (Referer checking failed - no Referer.)
WARNING:django.security.csrf:Forbidden (Referer checking failed - no Referer.)
Refererがないと弾かれてしまうっぽい
解決方法
リクエストヘッダーに Referer
を設定することで解消できた。
以下のようにすることでリクエストを行うことが出来た
$ curl -X POST -b "csrftoken=hoge; sessionid=hoge;" -H "x-csrftoken: hoge" -H "Referer: https://hoge.com" -d '{"data": "hoge"}' "https://endpoint.com/api/hoge"
GETリクエストの場合は、Refererがなくても動作したので、なくて大丈夫っぽいです