LoginDiscoveryHandler インターフェース
名前空間
使用方法
インタビューベースのログイン用の Auth.LoginDiscoveryHandler を実装します。このハンドラは、入力された ID からユーザを検索し、Site.passwordlessLogin をコールして、使用するログイン情報 (メール、SMS など) を決定できます。または、ハンドラはユーザをログイン用のサードパーティ ID プロバイダにリダイレクトできます。このハンドラを使用した場合、ログインページにパスワード項目は表示されません。ただし、Site.passwordlessLogin を使用して、パスワードを要求できます。
ユーザの観点では、ユーザはログイン画面で ID を入力します。次に、PIN またはパスワードを入力してログインを完了します。または、SSO が有効になっている場合、ユーザはログインをスキップします。
例については、「LoginDiscoveryHandler の実装例」を参照してください。詳細は、『Salesforce External Identity Implementation Guide (Salesforce External Identity 実装ガイド)』を参照してください。
LoginDiscoveryHandler メソッド
LoginDiscoveryHandler のメソッドは次のようになります。
login(identifier, startUrl, requestAttributes)
署名
public System.PageReference login(String identifier, String startUrl, Map<String,String>requestAttributes)
パラメータ
- identifier
- 型: String
- ログイン画面で外部ユーザが入力した識別子 (メールアドレスや電話番号など)。
- startUrl
- 型: String
- 外部ユーザが要求したコミュニティページへのパス。ログインが成功すると、ユーザはこの場所にリダイレクトされます。
- requestAttributes
- 型: Map<String,String>
- ログインページにアクセスしたときのユーザのブラウザ状態に基づくログイン要求に関する情報。requestAttributes は CommunityUrl、IpAddress、UserAgent、Platform、Application、City、Country、Subdivision の値を渡します。City、Country、Subdivision の値は IP 地理位置情報から取得されます。
例
次に requestAttributes のサンプル応答を示します。
LoginDiscoveryHandler の実装例
この Apex コード例は Auth.LoginDiscoveryHandler インターフェースを実装します。ログインページで提供された ID に応じて、ログインしているユーザのメールまたは電話番号が検証済みかどうかをチェックします。検証済みの場合 (Auth.VerificationMethod.EMAIL または Auth.VerificationMethod.SMS)、ID (ユーザのメールアドレスまたはモバイルデバイス) にチャレンジを送信します。検証ページでユーザがコードを正しく入力すると、ユーザは開始 URL で指定されたコミュニティページにリダイレクトされます。ユーザが検証されない場合、ユーザはログインのためのパスワードを入力する必要があります。また、ハンドラは users.size()==1 のコードによってメールアドレスと電話番号が一意であることも確認します。
discoveryResult 関数は Site.passwordlessLogin メソッドをコールし、指定された検証方法でユーザをログインします。getSsoRedirect 関数は、ユーザが SAML または認証プロバイダのどちらを使用してログインするかを参照します。実装に固有のロジックを追加して、この参照方法を操作します。