先日投稿したばかりだけど、なんかこれって”イマ”の方法じゃないよなーって思っていたらもっといいモジュールがあったのでさくっと乗り換えたいと思います。
今回利用するのはdjango-social-authです。まずはdjango-social-authを入手します。(ちなみに前回作ったものはさくっと削除しました)
$ pip install django-social-auth または $ easy_install django-social-auth
次に、setting.pyをいじります。基本的にgithubのREADMEを元に進めていますので、そちらを参考にしてもらったほうがいいかもしれません。初めに、INSTALLED_APPSの中にsocial_authを追加します。
INSTALLED_APPS = ( ... 'social_auth' )
setting.pyの後方に、新しくAUTHENTICATION_BACKENDSを追加します。
AUTHENTICATION_BACKENDS = ( 'social_auth.backends.twitter.TwitterBackend', 'social_auth.backends.facebook.FacebookBackend', 'social_auth.backends.google.GoogleOAuthBackend', 'social_auth.backends.google.GoogleOAuth2Backend', 'social_auth.backends.google.GoogleBackend', 'social_auth.backends.yahoo.YahooBackend', 'social_auth.backends.browserid.BrowserIDBackend', 'social_auth.backends.contrib.linkedin.LinkedinBackend', 'social_auth.backends.contrib.livejournal.LiveJournalBackend', 'social_auth.backends.contrib.orkut.OrkutBackend', 'social_auth.backends.contrib.foursquare.FoursquareBackend', 'social_auth.backends.contrib.github.GithubBackend', 'social_auth.backends.contrib.dropbox.DropboxBackend', 'social_auth.backends.contrib.flickr.FlickrBackend', 'social_auth.backends.contrib.instagram.InstagramBackend', 'social_auth.backends.OpenIDBackend', 'django.contrib.auth.backends.ModelBackend', )
前回も書きましたが、django.contrib.auth.backends.ModelBackendを書き忘れるとadminページにログインできなくなりますので、忘れないようにしてください。私はこんなにいらないので、とりあえずはTwitter, Facebook, Google(OAuth2)を利用しようと思います。
OAuthキーを設定します。同じくsetting.pyに書き込みます。これも、必要に応じていらないものは削除してください。キーは、それぞれのDeveloperサイトから入手できます。
TWITTER_CONSUMER_KEY = '' TWITTER_CONSUMER_SECRET = '' FACEBOOK_APP_ID = '' FACEBOOK_API_SECRET = '' LINKEDIN_CONSUMER_KEY = '' LINKEDIN_CONSUMER_SECRET = '' ORKUT_CONSUMER_KEY = '' ORKUT_CONSUMER_SECRET = '' GOOGLE_CONSUMER_KEY = '' GOOGLE_CONSUMER_SECRET = '' GOOGLE_OAUTH2_CLIENT_ID = '' GOOGLE_OAUTH2_CLIENT_SECRET = '' FOURSQUARE_CONSUMER_KEY = '' FOURSQUARE_CONSUMER_SECRET = '' GITHUB_APP_ID = '' GITHUB_API_SECRET = '' DROPBOX_APP_ID = '' DROPBOX_API_SECRET = '' FLICKR_APP_ID = '' FLICKR_API_SECRET = '' INSTAGRAM_CLIENT_ID = '' INSTAGRAM_CLIENT_SECRET = ''
次に、loginページのURLを設定します。これもsetting.pyです。このへんは細かい設定もできるので、したい場合はgithubのページを参照してください。
LOGIN_URL = '/login-form/' LOGIN_REDIRECT_URL = '/logged-in/' LOGIN_ERROR_URL = '/login-error/'
urls.pyにURLを設定していきます。基本的にはsocial_auth.urlsの行だけでいいのですが、今回LOGIN_REDIRECT_URLを新しく/logged-in/に設定しているので、これに対するURL設定も追加します。
urlpatterns = patterns('', ... url(r'', include('social_auth.urls')), url(r'^logged-in/$', 'games.views.logged_in'), ... )
ログインするためのURLをindex.htmlなどに定義します。
<ul> <li><a href="{% url socialauth_begin 'twitter' %}">Enter using Twitter</a></li> <li><a href="{% url socialauth_begin 'facebook' %}">Enter using Facebook</a></li> <li><a href="{% url socialauth_begin 'google-oauth2' %}">Enter using Google OAuth2</a></li> </ul>
とりあえず動くか確認するために、views.pyに以下を追加します。
def logged_in(request): return render_to_response('logged_in.html', { }, context_instance=RequestContext(request))
で、logged_in.htmlをtemplateの中に作ります。今回、ユーザ名を表示させてみるということで必要最低限の以下のものを。
Welcome {{ user.username }}!
views.pyでは何もしませんでしたが、ログインが正常に完了するとuserとう名前でログインユーザの情報が保存されています。試しにやってみると、Twitter, Facebook, Googleすべてで正常にログインできました!わーい!
最後に今回テストに際してはまったことを2つほど。
- Facebookの認証はlocalhostで試せない(リダイレクト先がlocalhostを受け付けず、エラーページに飛ぶ)
- →/etc/hostsに適当に”127.0.0.1 127.0.0.1 mytestapp.com”などを入れてテストする
- Googleアカウントで、一度認証したアプリの認証を削除したいけど、削除用のページが見当たらない
- →私の場合、https://www.google.com/dashboard/へ行き、一番上のAccountの下にあるWebsites authorized to access the accountに行ってRevoke Accessすることにより削除しました。ここ探すまでに結構時間がかかった…
こういったライブラリを使うと、本当に便利だなー!と思います。簡単に色んなソーシャルツールと繋がることが出来ました。まだユーザをどうやって使っていくか課題が残ってますが、いろいろ有益なことを発見したらまた書いていきたいと思います。ではでは。
2012/03/08追記:
- Googleの認証がOAuth2じゃなくてOpenIDになっていました。backend名は正しくはgoogle-oauth2になります
- Google APIsにアプリとして登録するとき、Redirect URLはhttp://mypageurl/complete/google-oauth2/となります。デフォルトとは違うので、注意してください
Leave a Reply