DjnagoでGoogleやFackbook、Twitter、Yahooログインを実装する場合にsocial-auth-app-djangoというライブラリを使用する方はおおいのではないでしょうか?
今回はsocial-auth-app-djangoを使ってソーシャル認証機能を実装する際に知っておくと問題解決がスムーズになりそうな内容を書いていこうと思います!
social-auth-app-djangoはdjango-social-authというdjangoアプリから派生したものでした。
しかし、現在(2021/06)django-social-authは非推奨とされ、django-social-authが依存しているpython-social-authも開発停止となってるようです。
social-auth-app-djangoはsocial-auth-coreというモジュールを使用して開発が行われています。
ちなみにsocial-auth-app-djangoのREADME.mdに「python-social-auth」と記載されていますが、これ上記に記載したpython-social-authとは別物です。
ドキュメントはこちら
python-social-auth.readthedocs.io
そして掲題の内容についてなのですが、外部サービスのアカウントを使用して自社のアプリに認証機能を組み込むときに外部サービスの開発者サイトへログインしてリダイレクトURLなどを設定するかと思います。
もし本番サイトがHTTPSで運用している場合、social-auth-app-djangoを使用する際には必ず「SOCIAL_AUTH_REDIRECT_IS_HTTPS=True」をsettings.pyに記載することを忘れないでください。
[app_name]/settings.py
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
この設定が無いと実際に本番環境へデプロイして外部サービスのログイン画面へリダイレクトしたときに400エラーが発生します。
なぜならsocial-auth-app-djangoがリクエスト時にパラメータへ設定するリダイレクトURLのプロトコルに'http'を設定しています。
そのため実際に登録しているリダイレクトURIと異なり、400エラーとして返ってきます。
これはdeveloper toolのNetworkタブでリクエストを確認することができます。
そのためHTTPSの本番環境化では事前にチェックしておくとよいですね。
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
上記の設定は「redirect_uri」に設定するURLのプロトコルを'http'から'https'へ変更してくれるようになります。
Stack over flowでも同様の内容が上がってますね。 stackoverflow.com
多分初学者の方とかはこの状況にぶち当たると相当な時間を費やすと思います。
なぜならパラメータ自体はライブラリ側でリクエスト時に付与されるため、画面上からパッみれるものではないからです。
この記事が少しでお役に立てれば幸いです。