OpenID認証を取り入れる

  • 次にOpenID認証を取り込む。
  • AuthKitを使うのが手っ取り早い。
  • だけど、説明書が整備されていなくて結構苦労した。
  • 以下の手順でたぶんOK。

AuthKitの設定(config/middleware.py)

from myclock.config.environment import load_environment
from authkit.authenticate import middleware
#....
#make_appの# CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)後に
    app = middleware(
        app,
        app_conf = app_conf,
        global_conf = global_conf,
        )

    app = SessionMiddleware(
        app,
        key = 'authkit.open_id',
        secret = 'secret',
        )

AuthKitの設定(development.ini)

authkit.setup.method = openid, cookie
authkit.openid.path.signedin = /clock/now
authkit.openid.store.type = file
authkit.openid.store.config =
authkit.openid.charset = UTF-8
authkit.cookie.secret = secret
authkit.cookie.signoutpath = /clock/signout
  • openidのセッション情報はとりあえずファイル書き込みにする。これではスケールしないけど、今はお試しなのでよしとする。

コントローラ(clock.py)

  • now()メソッドにデコレータ装着
import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from myclock.lib.base import BaseController, render
import datetime

from authkit.authorize.pylons_adaptors import authorize
from authkit.permissions import RemoteUser

log = logging.getLogger(__name__)

class ClockController(BaseController):
    @authorize(RemoteUser())
    def now(self):
        c.title = 'My Clock'
        c.heading = 'Welcome!'
        c.content = "Current time is %s" % str(datetime.datetime.now())
        return render('/derived/clock/now.html')

試す

  • この状態でhttp://サーバアドレス/clock/nowにつなぐと、OpenID認証画面が表示される。


  • 例えばHatenaのOpenIDを入れると...HatenaのLogin画面が表示される。*1


  • Hatenaにログインすると、今度はアプリケーションにつないでもよいかという確認画面がでてくる。


  • 許可を選択すると、時刻表示画面がでてくる。

とりあえずはOpenIDでの認証はできるようになったが、以下の項目が足りない。この後、ぼちぼち追加して行く。

  • ゲスト画面(=OpenID認証画面)での時刻表示。
  • サインアウト。
  • ニックネームや時差を入力する。

目次に戻る

*1:Hatenaにログインしていなければ、ね