OpenIDログイン画面の設定
OpenID認証画面だが、以下の問題が残っている。
- OpenID入力欄が狭い。
- 時刻表示できない。
そもそも、この認証画面は誰が表示しているのだろう? もちろん、AuthKitなわけだが、具体的にはAuthKitのauthkit/authenticate/openid.pyの中のtemplate()で定義されている。
def template(): return """\ <html> <head><title>Please Sign In</title></head> <body> <h1>Please Sign In</h1> <div class="$css_class">$message</div> <form action="$action" method="post"> <dl> <dt>OpenID Passurl:</dt> <dd><input type="text" name="openid" value="$value"></dd> </dl> <input type="submit" name="authform" /> <hr /> </form> </body> </html> """
つまり、こいつを上書きしてやればOpenID認証画面を好きなように変更できるのである。そのためには、development.iniの[app:main]セクションでauthkit.openid.template.objに認証画面テンプレートオブジェクトを与えれば良い。
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 authkit.openid.template.obj = myclock.lib.auth:make_template
myclock/lib/auth.pyを作成し、make_template()を定義する。
from pylons.templating import pylons_globals from mako.template import Template import datetime def make_template(): globs = pylons_globals() template = Template(filename = globs['config']['pylons.paths']['templates'][0] + "/derived/lib/signin.mako") return template.render(time = str(datetime.datetime.now()))
templates/base/signin.mako
<html> <head><title>Please Sign In</title></head> <body> <h1>Welcome</h1> Current time is ${time} <div class="$css_class">$message</div> <form action="$action" method="post"> <dl> <dt>Passurl:</dt> <dd><input type="text" name="openid" value="$value" size="80"></dd> </dl> <input type="submit" name="authform" /> <hr /> </form> </body> </html>
- OpenID入力欄を80桁にした。
- ${time}変数を使って時刻を表示できるようにした。
この状態でhttp://サーバアドレス:5000/clock/nowを表示すると
- 時刻が表示され、かつ、OpenID入力欄が伸びていることがわかる。