app-engine-patchでgoogle-app-engine-django-openidを使う
他のところで一度書いたネタなのですが、こっちにも書いておきます。
GAE+Djangoの組み合わせでOpenIDを使ってみようというエントリです。
google-app-engine-django-openid
DjangoでOpenIDを使うときはdjango-openidというそのままのライブラリがあるので、これをpython-openidと組み合わせて使うのですが、django-openidはRDBに設定やらを書き込むのでGAEのdatastoreでは使えません。(たぶん)
そこで使うのが、google-app-engine-django-openidというこれまたそのままのライブラリです。
プロジェクトのサイトは以下ですが、使うにはソースコードをSVNからチェックアウトする必要があります。
http://code.google.com/p/google-app-engine-django-openid/
のSourceをクリックして、
svn checkout http://google-app-engine-django-openid.googlecode.com/svn/trunk/ google-app-engine-django-openid-read-only
なお説明書きを見ると、新しくプロジェクトを作るにはGAE-Helperを使ってね!と書いてあります。が、試してみたところapp-engine-patchでも使えました。
- プロジェクトのルートにopenidディレクトリとopenidgaeディレクトリをコピー
- INSTALLED_APPSにopenidgaeを追加
- プロジェクトのルートにあるurls.pyに適当なURLを追加してopenidgaeのurls.pyをインクルード
これでmanage.py runserverすればlocalhost:8000/openid/loginなどとしてログイン画面が出てくるはずです。なんかかっこいいIDセレクタまでついています。
ログインしている状態で、
import openidgae user = openidgae.get_current_person(request, response)
のようにすればユーザ(Person)オブジェクトが取得できます。自分でメソッドを追加したければopenidgae/views.pyを編集すればよいです。
バグ
そんな感じで試してたら先日書いたバグ(というほどでもない)を見つけました。
POSTで受けとるはずのところでGETを参照しているので、ログイン後のリダイレクト先が常にルートになってしまうため修正。
サンプル
そんなわけでDjango Hack-a-thonの復習もかねて、はてなIDでログインできるイベント管理アプリを作ったので公開します。
イベント日程調整ツール
http://chkfj-gae.appspot.com/event/