DjangoをherokuにデプロイしたらForbidden (403) CSRF verification failedが表示されてしまったので解決方法を記録
先日個人的にDjangoでプロジェクトを制作したので、herokuにデプロイしてみた。すると
上のForbidden (403) CSRF verification failedというエラーがPOST送信時に発生してしまうことが判明。
ローカルで実行していたときには発生しなかったものなので、原因を調べていくと、どうやら独自ドメインを設定したことによるCSRF認証エラーらしい。
意外と簡単に解決できたので、このエラーの解決方法を記録しておく。
結論
結論から述べると、settings.pyに以下を追加することでこのエラーを解消できる。
ALLOWED_HOSTS = [ "sharebuy.net" ]
CSRF_TRUSTED_ORIGINS = [ "https://sharebuy.net" ] #追加
ちなみに今回作成したプロジェクトというのはhttps://sharebuy.netでお名前.comでsharebuy.netというドメインを取得後、herokuにデプロイしたものと紐づけた。
しかしそのまま何もしないとdjango側で独自ドメインからのアクセス時にcsrfトークンが合っていたとしても見知らぬホストからのcsrf攻撃だと判定してしまうため、settings.pyに上記の二行を追加して、csrf攻撃でないことを教えてあげる必要がある。
ALLOWED_HOSTSには独自ドメインのみを記述し、CSRF_TRUSTED_ORIGINSには独自ドメインを含むURLそのものを追加する。なお、このCSRF_TRUSTED_ORIGINSはデフォルトでは記述されていないので、これごと追加する必要がある。
まとめ
HerokuにデプロイしたdjangoプロジェクトでPOST送信時にCSRF関連のエラーが発生したら、まずはsettings.pyを確認し、ALLOWED_HOSTSとCSRF_TRUSTED_ORIGINSを修正するとよい。
最後に宣伝にはなるが、今回作成(作成中)したhttps://sharebuy.netはAmazonの良い商品・悪い商品を手軽にシェアし、買い物ミスを防ぐためのサイトなので、よければ使ってみてほしい。
併せてサイトの見た目等でまだまだ修正の余地があるので、Web制作が得意で協力してやってもいいぞという方はぜひご連絡お待ちしております。
[itemlink post_id=”2041″]