Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その1

※書いている途中で見つけてしまったので貼っておきます。
GitHub: django-nonrel-gae-openid-auth
たぶんこれをチェックアウトして使えばすぐなんだろうと思います。
が、続きを書きます。興味ある人は読んでね!

Django-nonrelを使ってGAEでOpenID認証をする方法を探してて、gaeopenidというのを見つけて、それで実装していたんですが、どうもそれは以前のDjangoをGAEで使う場合のやつみたいで、今はdjango_openid_authを普通に使えるっぽい?という情報を見た。まぁ設定はしないといけないんだけども。

Managing per-field indexes on App Engine

上記のサイトでは、Django-nonrelでdjango_openid_authを使うとOpenIDで使うフィールドがデータストアでindex貼られてないからデータが取れないからそういう設定いるよという話だった。まずこれを見て、django_openid_authが使えるっぽいという確証を持った訳です。

次に、先のURLでリンクが貼られていますが、django_openid_authのサイトからライブラリをダウンロードしてきます。
これを解凍して、django_openid_authパッケージをプロジェクトにペーストします。

README.txtを見たら、OpenID用のライブラリをインストールしろと書いてあるので、以下のURLから、Python用のOpenIDのライブラリをダウンロードして、openidパッケージをプロジェクトにペーストします。
http://www.janrain.com/openid-enabled

ライブラリの準備はとりあえずこれで完了です。次に、GAE用のファイルの作成などしていきます。
settings.pyの編集を行います。まずはINSTALLED_APPSです。

INSTALLED_APPS = (
#    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.auth',
    'django.contrib.sessions',
    'djangotoolbox',
    'autoload',
    'dbindexer',

    # djangoappengine should come last, so it can override a few manage.py commands
    'djangoappengine',

    # django_openid_auth
    'django_openid_auth',
)

次に、OpenId用の設定です。同じくsettings.pyです。最後に追加すればいいかと。設定は各自の都合で見直していただければと思いますが、とりあえずこのままでも大丈夫ではないかと思います。

# django_openid_auth
AUTHENTICATION_BACKENDS = (
    'django_openid_auth.auth.OpenIDBackend',
    'django.contrib.auth.backends.ModelBackend',
)
OPENID_CREATE_USERS = True
OPENID_UPDATE_DETAILS_FROM_SREG = True
OPENID_USE_AS_ADMIN_LOGIN = False
LOGIN_URL = '/openid/login/'
LOGIN_REDIRECT_URL = '/'
GAE_SETTINGS_MODULES = (
    'gae_openid_settings',
)

次に、gae_openid_settings.pyを作成します。これは、OpenIDライブラリで保存されるデータが、データストアでindexが貼られていないため、indexを設定する処理です。GAEではindexのないデータに対して比較ができないためです(たぶん)。この投稿の先頭のほうで説明したやつです。

from django_openid_auth.models import Association, UserOpenID

FIELD_INDEXES = {
    Association: {'indexed': ['server_url', 'assoc_type']},
    UserOpenID: {'indexed': ['claimed_id']},
}

長いですが、次です。urls.pyを修正します。/openid/以下がOpenID認証を行うURLにします。

urlpatterns = patterns('',
    url(r'^$', 'django.views.generic.simple.direct_to_template', {'template': 'home.html'}),
    url(r'^_ah/warmup$', 'djangoappengine.views.warmup'),
    # openid
    (r'^openid/', include('django_openid_auth.urls')),
)

えーと、たぶんこれで大丈夫なはず…。
./manage.py runserver
でDjangoのテストサーバを立ち上げて、 http://localhost:8000/openid/login にアクセスしてみましょう。
以下のような画面になればOKです。

あとは入力フィールドにOpenID用のurlを入力しましょう。私は入力欄の場合は
http://www.yahoo.co.jp
をよく使います。これでYahoo!Japanのアカウントでログインできます。

できたら、http://localhost:8000/にリダイレクトされます。このままだと本当にログインできているかどうか、さっぱりわかりませんが、とりあえずできているようです。確認方法はまた別記事にしようと思います。実はまだログアウトする方法がわかっておらんのですorzわかりました。Djangoの認証のログアウトを行うだけでした。

その2に続く・・・


タグ Django, GAE for Python, Python | パーマリンク.

コメント・トラックバック一覧

  1. Pingback: Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その2 | 自転車で通勤しましょ♪ブログ

コメントを残す

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