背景
自分の作成中のwebアプリにTwitter連携したログイン機能が欲しかったので導入してみました。
環境
- Python==3.7
- Django==2.2.5
- django-allauth==0.41.0
最初に悩んだこと
pythonでDjangoにTwitter認証機能を導入するには主に2パターンです。
django-allauth
social-auth-app-django
のどちらかを導入することでお手軽できます。
しかしそれぞれの良い点悪い点もありまして、
django-allauth | social-auth-app-django | |
---|---|---|
TwitterのAPI Keyの場所 | データベース | settingファイル読込 |
ログイン用テンプレート | ある | ない |
こんな感じになっています。
特にAPI Key
DB管理だと非常にお手軽なものの、DBを作り直したとき再度登録する手間がありますからね。
ただ今回はとにかく早く実装を試してみたかったのもあり、テンプレートがあるdjango-allauthを選択しました。
やり方
事前準備 APIKey入手
まずは事前に[Twitter] (https://developer.twitter.com/)にてAPIKeyを取得します。
基本情報登録(認証に何日かかかるのはガマン)
→アプリ登録
という流れの通りにすすめていくのですが、注意点としてCallbackUrlを正しく設定する必要があります。
CallbackUrlとは
簡単に言うと
「ログインしたあとの遷移先」
です
これがないとTwitterのAPIはリダイレクト先を失ってエラーを出してしまいます。
ここでは
http://127.0.0.1:8000/accounts/twitter/login/callback/
と入力してあげると問題ないでしょう。
ここで、手に入れたAPIKey、APISecretを用いて今後の作業を進めて行きます。
実装
まずは
pip install django-allauth
でモジュール追加。
その後settings.pyに情報を追加していきます
INSTALLED_APPS = [
# 既存のものはそのまま
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.twitter',
]
SITE_ID = 1
LOGIN_REDIRECT_URL = 'home'
ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/'
特に今回はコイツが大事
'allauth.socialaccount.providers.twitter',
これでTwitterが認証に使えるようになります。今回は解説しませんが、他にも
'allauth.socialaccount.providers.github',
と追加するとgithubログイン認証で使えるようになります。お手軽ぅ❗
admin情報追加
python manage.py migrate #DBマイグレート
python manage.py createsuperuser #admin用ユーザ作成
でDBの準備をした後は自分の環境で
http://127.0.0.1:8000/admin/
へログイン
外部アカウントが出来ていますね。
Social applicationsからTwitterの情報を登録出来ます。
Client idとSecret keyはTwitterデベロッパーで手に入れたものをコピペしましょう。
ログインしてみよう
http://127.0.0.1:8000
にアクセス。
Sign in
このようにログイン画面が表示されるようになりました。
ここでTwitterを押すと
よく見る認証画面が出てきて
ログイン成功❗
さらにadminを確認すると
※Token等は隠してます
Twitterのトークン情報を入手出来ているのが確認できました😆
まとめ
このように案外シンプルに実装出来ます!
アプリなどにTwitter認証があるだけでユーザの登録の敷居が低くなりやすいので、興味が出た方はぜひお試しを!