django-allauthでソーシャルアカウント認証
サイトの認証に独自のIDとパスワードで認証させるのではなく、SNSなどで認証するソーシャルアカウント認証ができるように、django-allauth の設定をしました。
インストール方法の詳細はドキュメントを参照してください。
(.venv)$ pip list |grep -i django
Django 3.2.5
django-allauth 0.45.0
django-extensions 3.1.3
ブラウザで https://127.0.0.1:8000/accounts/login/ にアクセスし、「Facebook」をクリックすると、
URLを読み込めません: このURLのドメインはアプリのドメインに含まれていません。このURLを読み込むには、アプリ設定のアプリドメインにすべてのドメインとサブドメインを追加してください。
というエラーメッセージが出てきます。FACEBOOK for Developpers の「マイアプリ」でとりあえず設定を見てみようと、「Facebookログイン」>「設定」でOAuthの設定を確認したところ、「有効なOAuthリダイレクトURI」を設定する必要があるようでした。
エラー画面のURLは以下のようになっていて、この redirect_uri
が「有効なOAuthリダイレクトURI」 に設定されていないとだめなようです。
https://www.facebook.com/v7.0/dialog/oauth?client_id=9999999999999999&redirect_uri=https%3A%2F%2F127.0.0.1%3A8000%2Faccounts%2Ffacebook%2Flogin%2Fcallback%2F&scope=email&response_type=code&state=51E0V2Gy7yfG
redirect_uri だけコピペしてアンエスケープするとこんなかんじ。
$ perl -e '$url = "redirect_uri=https%3A%2F%2F127.0.0.1%3A8000%2Faccounts%2Ffacebook%2Flogin%2Fcallback%2F"; $url =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego; print "$url\n";'
redirect_uri=https://127.0.0.1:8000/accounts/facebook/login/callback/
設定変更しようとしたのですが、電話番号かクレジットカードを登録しないといけないらしく、断念しました。はい、Facebookは信用していません。
次に Google の OAuth を試してみましたが、こちらも、
承認エラー
エラー 400: redirect_uri_mismatch
このアプリは Google の OAuth 2.0 ポリシーに準拠していないため、ログインできません。\n\nこのアプリのデベロッパーの方は、Google Cloud Console でリダイレクト URI を登録してください。
というエラー。Google Cloud Console で設定しようと思ったら、1年間の無料期間が終了していたので使えず断念しました。有料アカウントに更新する必要があるようですが、たぶん無料で使えそうなので、もう少しちゃんと調べてから更新することにしました。
気を取り直して、最後にLINEです。こちらも、
400 Bad Request
Invalid redirect_uri value. Check if it is registered in a LINE developers site.
というエラーになったので、LINE Developers の「LINEログイン設定」>「コールバックURL」に redirect_uri
を追加します。
$ perl -e '$url = "redirect_uri=https%3A%2F%2F127.0.0.1%3A8000%2Faccounts%2Fline%2Flogin%2Fcallback%2F"; $url =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego; print "$url\n";'
redirect_uri=https://127.0.0.1:8000/accounts/line/login/callback/
コールバックURLの設定はこんな画面です。
気を取り直して再度LINEでログインしてみると、ログイン成功!と思ったのですが、エラーになりました。
ログを確認するとメールが送信できなかっただけのようだったので、テスト用のダミーSMTPサーバ(smtp4dev)を起動します。
ちなみに smtp4dev の最新はV3で、いろんなOSで使用できるようにUIがブラウザベースになってしまいましたが、Windowsで利用するにはタスクトレイに常駐するGUIベースの V2 が便利です。
再度LINEでログインしてみたら、やっとログイン成功!
ひとまずこれで確認完了です。