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での認証はできるようになったが、以下の項目が足りない。この後、ぼちぼち追加して行く。
- ゲスト画面(=OpenID認証画面)での時刻表示。
- サインアウト。
- ニックネームや時差を入力する。
*1:Hatenaにログインしていなければ、ね