web2py version: 1.99.4

2.2.5. Janrain Engage

Janrain Engage を使った認証方式です。

Note

Janrain Engage (旧名 RPX)は認証サービスです。このサービスを利用すると複数のプロバイダへの認証を、 Janrain Engage を経由して行うことが可能になります。

設定

Janrain Engage の APIキーを取得する必要があります。取得方法は次ページを参照下さい。

設定前に アクセス制御の基本的な設定 を完了しておく必要があります。また 各認証方式での挙動の違い も参照下さい。
モデル定義(db.pyなど)にて、 login_formRPXAccount インスタンスを設定します。

設定例

from gluon.contrib.login_methods.rpx_account import RPXAccount
auth.settings.login_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://localhost:8000/%s/default/user/login" % request.application)

RPXAccount コンストラクタには、 request オブジェクト、先ほど取得した APIキ ーと アプリケーション名 、そしてログインフォームの URL を指定する必要があります。

認証用クラス

このクラスのコンストラクタのパラメータについて説明します。

class rpx_account.RPXAccount(request, api_key, domain, url[, embed, auth_url, language, prompt, on_login_failure])
request
request オブジェクトを指定します。
api_key
Janrain Engage の APIキーを指定します。
domain
Janrain Engage で設定したアプリケーション名を指定します。Application Domain ではありません。
embed
認証画面の表示形式を指定します。デフォルトは True です。Trueの場合、埋め込み式で表示します。 Trueで無いときは、モーダルダイアログ形式で表示します。
auth_url
Janrain Engage の API URL を指定します。デフォルトは、 “https://rpxnow.com/api/v2/auth_info” です。 このパラメータは特に変更することはありません。 詳細は、 Janrain Engage API auth_info を参照下さい。
language
言語コードを指定します。デフォルトは “en” です。
prompt
このパラメータは特に何も使っていないようです。デフォルトは ‘rpx’ です。
on_login_failure
認証が成功しなかった場合のリダイレクトを指定します。デフォルトは None です。

ユーザ属性情報のカスタマイズ

Janrain Engage ではログイン成功時に、ユーザの属性情報が辞書型データで提供されます。この情報はプロバイダによって項目に違いがあります。 データ項目名及び、プロバイダ毎に提供されるデータについては次を参照ください。

ユーザ属性のデータ項目 janrain.com - User Profile Data
プロバイダ毎のユーザ属性 janrain.com - Provider Guide

Janrain Engage からのユーザの属性情報は、 auth_user テーブルの各フィールドに次のようにマッピングされます。 Facebook と Google以外のプロバイダは、default で設定されます。

プロバイダ registration_id username email first_name last_name
Facebook identifier preferredUsername email givenName familyName
Google identifier preferredUsername email givenName familyName
default identifier preferredUsername email preferredUsername  

これらのデータマッピングは、次の属性値を設定することにより変更可能です。

Auth.settings.login_form.mappings

マッピング方法を記述した無名関数(ラムダ式)を指定します。ラムダ式の中では、auth_user のフィールド名をキーとして、 マッピングさせたいユーザ属性値を値にした辞書型データを生成します。

マッピング設定例

auth.settings.login_form.mappings.Facebook = lambda profile:\
            dict(registration_id = profile["identifier"],
                 username = profile["preferredUsername"],
                 email = profile["email"],
                 first_name = profile["name"]["givenName"],
                 last_name = profile["name"]["familyName"])

属性の後にプロバイダ名を追加して、ラムダ式を記述します。

プロバイダ名は明確なリストがないですが、 Identity Providers のプロバイダ名の先頭文字を大文字して指定する必要があるようです。プロバイダによってはこのルールでない場合もあるようです。

使用例

オプションを指定しない Janrain Engage の使用例です。
from gluon.contrib.login_methods.rpx_account import RPXAccount
auth.settings.login_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://localhost:8000/%s/default/user/login" % request.application)
../../../_images/web2py_ac_008r.JPG ../../../_images/web2py_ac_009r.JPG
embed パラメータを False (モーダルダイアログ形式)した場合の使用例です。
from gluon.contrib.login_methods.rpx_account import RPXAccount
auth.settings.login_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://localhost:8000/%s/default/user/login" % request.application,
    embed = False)
../../../_images/web2py_ac_077r.PNG ../../../_images/web2py_ac_078r.PNG
language パラメータを “ja” にした場合の使用例です。
from gluon.contrib.login_methods.rpx_account import RPXAccount
auth.settings.login_form = RPXAccount(request,
    api_key='...',
    domain='...',
    url = "http://localhost:8000/%s/default/user/login" % request.application,
    language = "ja")
../../../_images/web2py_ac_010r.JPG ../../../_images/web2py_ac_011r.JPG

日本語にすると一部表示が崩れるようです(この件は修正依頼しています)。

また Janrain Engage では認証画面のデザインも変更可能ですが、契約プランを Pro にする必要があります。 その場合、年間最低 1000ドル の費用が掛かります。