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入力欄が伸びていることがわかる。

Gitコミット先

目次に戻る