Skip to main content

コードを使用してモバイルファーストログインをカスタマイズする

学習の目的

このモジュールを完了すると、次のことができるようになります。

  • ログイン検出ハンドラーを見つけて名前を変更する。
  • ログイン検出ハンドラーにソーシャルサインオン機能を追加する。
  • 要求属性を使用してユーザー情報を収集する。

デフォルトのログイン検出ハンドラーを見つける

[ログイン & 登録] ページからログイン検出ハンドラーを作成すると、Salesforce によってデフォルトのハンドラーが Apex クラスとして作成されます。このハンドラーは、他の Apex クラスと一緒に組織の [Apex クラス] ページに表示されます。

  1. [Login & Registration (ログイン & 登録)] ページの [Login Page Setup (ログインページ設定)] の下にある [Login Discovery Handler (ログイン検出ハンドラー)] テキストボックスに表示されているハンドラー名をメモ (またはコピー) します。[Login & Registration (ログイン & 登録)] ページをもう一度開く必要がある場合は、[Setup (設定)] の [Quick Find (クイック検索)] ボックスに「All Sites」(すべてのサイト) と入力し、[All Sites (すべてのサイト)] を選択します。[NTO Customers (NTO 顧客)] サイトの [Workspaces (ワークスペース)] をクリックします。[Administration (管理)] タイルをクリックして、[Login & Registration (ログイン & 登録)] をクリックします。デフォルトのログイン検出ハンドラーの名前のスクリーンショット
  2. 別のタブで、[Setup (設定)] から [Quick Find (クイック検索)] ボックスに Apex Classes (Apex クラス) と入力し、[Apex Classes (Apex クラス)] をクリックします。このハンドラーは [Apex クラス] ページのクラスのリストに表示されています。
  3. リスト内のログイン検出ハンドラーの名前を見つけるか検索します。Apex クラスのリストからハンドラーを見つけるのは簡単ではありませんね。それを改善するために、ハンドラーの名前をわかりやすいものに変更できます。また、名前を変更することで、ハンドラーがカスタマイズされたことが一目でわかります。ハンドラーは自動作成されたものではなくなるため、それを示すように「auto created」を含む名前を変更しましょう。
  4. ハンドラー名の横にある [編集] をクリックします。ハンドラー名はコードの 1 行目に表示されています。
  5. Salesforce 名を独自の名前に変更して [Save (保存)] をクリックします。Apex クラスのログイン検出ハンドラーの名前のスクリーンショット[Login & Registration (ログイン & 登録)] ページに戻り、ページを更新します。ログイン検出ハンドラーが新しい名前に更新されています。[ログイン & 登録] ページの新しいログイン検出ハンドラー名のスクリーンショット

デフォルトのログイン検出ハンドラーを理解する

ハンドラーのカスタマイズを開始する前に、Salesforce で生成されるハンドラーについて少し説明しておきます。『Salesforce Apex 開発者ガイド』の「LoginDiscoveryHandler の実装例」に完全なコードの例が記載されています。ここではログイン検出ハンドラーがどのように機能するかを説明します。

最初のステップはログインページから渡された ID (メールまたは電話番号) を取得することです。その後、ID が有効な形式かどうかを確認します。

次に、その ID に関連付けられたユーザーをデータベースに照会します。ユーザーが有効で ID が一意であれば、すでにその ID がユーザーによって検証済みかどうかを確認します。

メモ

ユーザーが検証したメールと電話番号はユーザーの詳細ページで追跡されます。ユーザーがメールアドレスを検証すると、[ユーザーの検証済みメール] 項目が true に設定されます。ユーザーが携帯電話番号を検証すると、[ユーザーの検証済み携帯番号] 項目が true に設定されます。(ユーザーの ID 検証状況の追跡については次の単元で詳しく学習します。)

ID が検証済みであれば、メールまたはテキストメッセージで確認コードを送信し、検証に成功した後にユーザーがどこに移動するかを指定します。次に、ユーザーを [検証] ページに転送し、ユーザーはそこで確認コードを入力します。ID がまだ検証されていない場合は、パスワードを入力するページにユーザーを転送します。

今度は視覚的にハンドラーロジックを見てみましょう。

フローチャートでのログイン検出ハンドラーロジック

これは ID 検証プロセスのもう 1 つの見方です。

  1. ID を取得する。
  2. ID は有効か?
  3. 有効な場合、ID に関連付けられたユーザーを参照する。
  4. ユーザーは有効か?
  5. 有効な場合、ID は一意か?
  6. 「はい」の場合、ユーザーはその ID を使用して本人であることを検証したか?
  7. 「はい」の場合、ID は検証済みであるため、確認コードを送信する。「いいえ」の場合、ID は未検証であるため、パスワードを求める。
  8. 確認コードまたはパスワードが正しく入力されたら、ユーザーを Experience Cloud サイトのホームページに転送する。

ソーシャルサインオン用にログイン検出ハンドラーをカスタマイズする

多くの顧客は Twitter、Google、LinkedIn といったソーシャルネットワークのログイン情報を使用してサイトにログインすることを好みます。組織でソーシャルサインオンを許可するように設定している場合は、ログイン検出を使用することで顧客のログインはさらに簡単になります。プログラムによってソーシャルサインオンのロジックをハンドラーに追加できます。顧客はハンドラーロジックによって決定されたソーシャルネットワークに直接転送されます。

  1. Salesforce 認証プロバイダーを設定します。ソーシャルサインオンのためにハンドラーをカスタマイズするには、まずサポートしようとしているソーシャルネットワークが組織で設定されているかどうかを確認します。各ソーシャルネットワークに接続するための認証プロバイダーが必要です。Salesforce では、主要なソーシャルネットワークに接続するためのデフォルトの認証プロバイダーがいくつか用意されており、さらに新しいソーシャルネットワークの登場に合わせて追加されているものもあります。目的のソーシャルネットワークがない場合は、数回のクリックで作成できます。
    1. [Setup (設定)] から、[Quick Find (クイック検索)] ボックスに Auth. Providers (認証プロバイダー) と入力し、[Auth. Providers (認証プロバイダー)] を選択します。
    2. ソーシャルネットワーク用の認証プロバイダーを作成します。Playground 組織には認証プロバイダーが設定されていません。作成する場合は、「顧客の ID」Trailhead モジュールの「ソーシャルサインオンの設定」単元を参照してください。その単元では、認証プロバイダーを設定し、クリックによってログインページに追加する方法を説明しています。
  1. ソーシャルネットワーク用の SSO URL を見つけます。認証プロバイダーをプログラムによって追加するときには、ソーシャルネットワークへの適切な SSO URL を追加する必要があります。
    1. [Auth. Providers (認証プロバイダー)] ページに戻るには、[Setup (設定)] から、[Quick Find (クイック検索)] ボックスに Auth. Providers (認証プロバイダー) と入力し、[Auth. Providers (認証プロバイダー)] を選択します。
    2. 目的のソーシャルネットワークの名前へのリンクをクリックします。[編集] リンクではなく、名前自体をクリックします。
    3. [Experience Cloud サイト] を展開します。組織内の各認証プロバイダーの SSO URL が表示されます。
      認証プロバイダーの設定ページに表示された SSO URL のスクリーンショット
  1. ログイン検出ハンドラーに SSO ロジックを追加します。この演習では、SSO ロジックは NTO Customers (NTO 顧客) サイト用に提供されています。本番組織では、ユーザーをソーシャルネットワークに転送するタイミングを決定するロジックをログイン検出ハンドラーに追加します。カスタムコードには、ユーザーがソーシャルネットワークを使用するか、Salesforce に直接ログインするかを決定するロジックが含まれます。たとえば、ユーザーオブジェクトのカスタム項目を参照することができます。ThirdPartyAccountLink (TPAL) 標準オブジェクトを使用してソーシャルサインオンを実装する例を次に示します。組織のユーザーがサードパーティの認証プロバイダーを使用して認証すると、サードパーティアカウントリンク (TPAL) のリストが生成されます。この例では、TPAL テーブルを照会し、ユーザーのメールに関連付けられた TPAL が見つかった場合は、ユーザーを転送して、Facebook または Linkedin でログインします。
//Redirect to Social Sign-On private PageReference getSsoRedirect(User user, String startUrl, Map<String, String> requestAttributes) { // You can look up whether the user can log in with their social credentials.
 List<ThirdPartyAccountLink> providers = [select provider from ThirdPartyAccountLink where Handle = :user.email]; String provider = providers[0].Provider; if (provider == 'facebook') {  return new PageReference([select SsoKickoffUrl from AuthProvider where DeveloperName='facebook'].SsoKickoffUrl); } else if (provider == 'linkedin') {  Return new PageReference([select SsoKickoffUrl from AuthProvider where DeveloperName='linkedin'].SsoKickoffUrl); } else {  return null; }

要求属性を使用してユーザー情報を収集する

ユーザーがログインページにアクセスしたときのブラウザー状態に基づいてログインポリシーを決定できます。たとえば、ユーザーが米国からログインしているか中国からログインしているかに基づいて異なるポリシーを設定できます。

ブラウザーデータを収集するには、LoginDiscoveryHandler.login メソッドの requestAttributes パラメーターを使用します。このパラメーターが渡す値は CommunityUrl、IpAddress、UserAgent、Platform、Application、City、Country、Subdivisio です。City、Country、Subdivision の値は IP 地理位置情報から取得されます。

CommunityUrl=http://MyDomainName-dev-ed.my.site.com:5555/discover IpAddress=55.555.0.0 UserAgent=Mozilla/5.0(Macintosh; Intel Mac OS X 10_13_4) Version/11.1 Safari/605.15 Platform=Mac OSX City=Chicago Country=United States Subdivision=Illinois

IP 地理位置情報値を使用した例を次に示します。

private PageReference getSsoRedirect(User user, String startUrl, Map<String, String> requestAttributes) { // Send US users through a local IdP service if(requestAttributes.get('Country') == 'United States') { String ssoURL = 'https://mycompany.com/idp'; return new PageReference(ssoURL); } return null; }

mobile (iOS) ユーザーの例を次に示します。

private PageReference getSsoRedirect(User user, String startUrl, Map<String, String> requestAttributes) { // Send iOS users through Facebook SSO if(requestAttributes.get('Platform') == 'iPhone') { String ssoURL = 'https://<MyDomainName>.my.salesforce.com/nto/services/auth/sso/Facebook'; return new PageReference(ssoURL); } return null; }

ユーザーが一意であることを確認する

本番組織では、同じ検証済みメールアドレスと携帯電話番号を持つ複数のユーザーが存在することが可能です。ただし、顧客には一意の ID が必要です。この問題に対処するには、ログイン検出ハンドラーにユーザーを絞り込むための数行のコードを追加し、ユーザーが一意であることを確認できるようにします。

『Apex 開発者ガイド』の LoginDiscoveryHandler クラスの説明には、External Identity ライセンスを持つユーザーが一意であることを確認するコード例が含まれています。他の用途に合わせてこのコードを応用できます。たとえば、他のユーザーライセンスまたは基準を持つユーザーに対応するようにコードを変更できます。

ここでは、モバイルファーストログインページを設定し、カスタマイズする方法を学習しました。次の単元では、レポート、グラフ、ダッシュボードが表示されるように設定して、進行状況を追跡する方法を学習します。

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む