web2py version: 1.99.4

2.3. 拡張ログインフォーム

認証方式によってデフォルトのログインフォームを使用するもの、専用のログインフォームを使用するものがあります。専用ログインフォームを使用する認証方式は、通常では他の認証方式とは共存できません。

しかし拡張ログインフォームを使用することにより、専用ログインフォームとデフォルトのログインフォームを同時に使用することが可能になります。

各認証方式が専用ログインフォームを使用するかどうかは、 各認証方式での挙動の違い を参照ください。

2.3.1. 設定

モデル定義(db.pyなど)にて、 login_formExtendedLoginForm インスタンスを設定します。

設定例

from gluon.contrib.login_methods.extended_login_form import ExtendedLoginForm
auth.settings.login_form = ExtendedLoginForm(auth, other_form)

第二パラメータ(other_formのところ)には、専用ログインフォームで使用する認証方式のインスタンスを指定します。

2.3.2. 拡張ログインフォームクラス

拡張ログインフォームクラスのコンストラクタのパラメータについて説明します。

class extended_login_form.ExtendedLoginForm(auth, alt_login_form[, signals, login_arg])
auth
Auth インスタンスを指定します。
alt_login_form
専用ログインフォームを使用する認証方式のインスタンスを指定します。
signals
トークン設定します。URLパラメータに設定トークンが含まれる場合、デフォルトのログインフォームを非表示にします。 デフォルトは [] (空値)です。
login_arg
特に使用していないようです。デフォルトは ‘login’ です。

2.3.3. 使用例

Janrain Engage を指定した例を示します。

使用例(Janrain Engage)

from gluon.contrib.login_methods.rpx_account import RPXAccount
other_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://%s/%s/default/user/login" \
        % (request.env.http_host, request.application))
from gluon.contrib.login_methods.extended_login_form import ExtendedLoginForm
auth.settings.login_form = ExtendedLoginForm(auth, other_form)

この設定によるログイン画面は次のようになります。

../../_images/web2py_ac_017r.PNG

上部にデフォルトのログインフォームが、下部に Janrain Engage の専用フォームが表示されます。

次にトークンを使用した設定例を示します。

使用例(Janrain Engageとトークン)

from gluon.contrib.login_methods.rpx_account import RPXAccount
other_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://%s/%s/default/user/login" \
        % (request.env.http_host, request.application))
from gluon.contrib.login_methods.extended_login_form import ExtendedLoginForm
auth.settings.login_form = ExtendedLoginForm(auth, other_form, signals=['token1'])

‘token1’ というトークンを signal パラメータに設定しています。 URLパラメータに該当するトークンの指定がある場合、デフォルトログインフォームを非表示にします。

トークンなしトークンあり

http://127.0.0.1:8000/myapp/default/user/login

http://127.0.0.1:8000/myapp/default/user/login?token1=test

../../_images/web2py_ac_018r.JPG ../../_images/web2py_ac_019r.JPG

右図はパラメータに signals で設定したトークンを指定しています。パラメータは使用しますが、パラメータ値は特に使用しません。 このため適当な値を指定すればよいです。