「djangoでfacebook, twitter, mixiでの認証使うにはどうしたらいいんだろ?」URLと質問したら、@key3さんから「@shigepon python-social-authおすすめ https://t.co/uWqOX8Xh94URLと教えて貰ったので試してみた。

一日試してみて、認証出来たんだけど、ドキュメント見ても、どれが最低限必要な設定なのか良く分からなかったのでブログに残しておく。

python-social-authをインストール

$ pip install python-social-auth

設定

# settings.py
INSTALLED_APPS = (
...
        'social.apps.django_app.default',
...
)
AUTHENTICATION_BACKENDS = (
...
        'social.backends.twitter.TwitterOAuth',#Twitterでの認証をする場合。他の認証がある場合は該当するバックエンドを追加
        'django.contrib.auth.backends.ModelBackend',
...
        )
SOCIAL_AUTH_TWITTER_KEY=''#これと次の行はTwitter認証用。別の認証を用いる場合は別の設定が必要
SOCIAL_AUTH_TWITTER_SECRET=''
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'
SOCIAL_AUTH_LOGIN_URL = '/login/'

注意: AUTH_USER_MODEL を加えるとエラー出たので注意(Django 1.6)

# urls.py
    url('', include('social.apps.django_app.urls',namespace='social')),

設定後

syncdbしておく

$ python manage.py syncdb

これで例えばtwitter認証の場合に

http://host/login/twitter

にアクセスすると認証を行ってくれるようになった。 テンプレートにリンクを作りたい場合は

<a href="\{\% url 'social:base' 'twitter' \%\}">login</a>

とかやると作れる。 「twitter」の部分は認証の種類によって変えるが、どういうルールで名前を決めるのかイマイチ分かってない。試行錯誤が要るかも。