★おわび:ちょっとwordpressとかテンプレートとかアップデートしたらデザインとか色々崩れて(いや、崩れてはないか?)ます。そもそもブログ自体を引っ越ししようと目論んでますがどうなるかわかりません。とりあえずはちょっと落ち着いて見れるまでしばらくこのままで。★
Welcome to Delicate template
Header
Just another WordPress site
Header

django-social-authをつかってみた

3月 8th, 2012 | Posted by keiko713 in 技術ネタ tech

先日投稿したばかりだけど、なんかこれって”イマ”の方法じゃないよなーって思っていたらもっといいモジュールがあったのでさくっと乗り換えたいと思います。

今回利用するのは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/となります。デフォルトとは違うので、注意してください

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>