2.2.5. Janrain Engage¶
Janrain Engage を使った認証方式です。
Note
Janrain Engage (旧名 RPX)は認証サービスです。このサービスを利用すると複数のプロバイダへの認証を、 Janrain Engage を経由して行うことが可能になります。
設定¶
Janrain Engage の APIキーを取得する必要があります。取得方法は次ページを参照下さい。
login_form
に RPXAccount
インスタンスを設定します。設定例
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 first_name last_name identifier preferredUsername givenName familyName identifier preferredUsername givenName familyName default identifier preferredUsername 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)
- 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)
- 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")
日本語にすると一部表示が崩れるようです(この件は修正依頼しています)。
また Janrain Engage では認証画面のデザインも変更可能ですが、契約プランを Pro にする必要があります。 その場合、年間最低 1000ドル の費用が掛かります。