この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
B2C Commerce バージョン 25.3 では、プラグイン SLAS カートリッジオプションがハイブリッド認証 (Hybrid Auth) に置き換えられました。
ハイブリッド認証は、Storefront Reference Architecture (SFRA)/SiteGenesis の認可と、Shopper Login and API Access Service (SLAS) の認可の両方を必要とする実装のためのスタンドアロンソリューションです。つまり、dwsid (SFRA/Site Genesis) と JSON Web トークン (SLAS) の両方が必要であり、これらのトークンを同期させる必要があります。ハイブリッド認証は、プラグイン SLAS アプローチを改良したもので、より効率的で合理化された方法を提供します。
ハイブリッド認証により、機能が B2C Commerce プラットフォームに直接移行されることで、ハイブリッドストアフロントのパフォーマンスと安定性が向上します。
ハイブリッド認証に移行して、向上したパフォーマンスと合理化されたワークフローを活用することを強くお勧めします。
Note
このガイドでは、一部が SFRA/SiteGenesis で、一部がコンポーザブルストアフロントであるハイブリッドストアフロントのハイブリッド認証を設定する方法について説明します。
ハイブリッド認証の詳細については、「ハイブリッド認証」を参照してください。
ハイブリッド認証を使用したハイブリッド実装に関連するタスクには、次のものがあります。
ハイブリッド認証を使用するには、以下を使用してサイトを構築します。
Progressive Web App (PWA) Kit バージョン 3.10 以降
次の表は、プラグイン SLAS とハイブリッド認証の PWA Kit 機能のサポートを比較したものです。
| 機能名 | PWA Kit w でサポートされています。プラグイン SLAS | PWA Kit w でサポートされています。ハイブリッド認証 | に関する注意事項 |
|---|---|---|---|
| SiteGenesis | N | Y | |
| サードパーティ IDP とソーシャル ログイン | N | 2025 年 4 月 30 日時点で部分的にサポートされています。 |
|
| パスワードレスログイン | N | Y | |
| SLAS プライベート クライアント | Y | Y | |
| SLAS Y | N* | パブリック クライアント | ハイブリッド認証のサポートは、今後のリリースで予定されています。 |
| SLAS トラステッド・システム (TSOB) | N | Y | |
| Script API 「Remember Me」機能 | N | N/A 従来の
|
|
| PWA Kit バージョン 2.x | Y | N* | HA の場合、PWA Kit 2.x のサポートは SLAS パブリック クライアントのサポートに依存しており、将来のリリースで計画されています。 |
| PWA Kit バージョン 3.x | Y | Y | salesforce/commerce-sdk-react* v3.2.0 *には PWA Kit 3.9.0 が同梱されています。 |
| Do Not Track (DNT) | N | Y | DNT を有効にして同期するには、特定の手順を実行する必要があります。ドキュメントガイドを参照してください。 |
| 買い物客のコンテキスト | N | Y | Salesforce では、
|
| コントローラの除外 | Y | N | ハイブリッド認証では、コントローラを除外する必要はありません。 |
| カスタマイズによる Y | Cookie 設定のカスタマイズ | N/A | ハイブリッド認証では、plugin_SLAS とは異なり、Cookie オブジェクトにアクセスできなくなり、Cookie 設定を上書きできなくなります。 |
*サポートは今後のリリースで予定されています。
一部が SFRA/SiteGenesis で、一部がコンポーザブルストアフロントであるハイブリッドストアフロントのハイブリッド認証を構成するには、このガイドで詳しく説明されている次の手順に従います。
埋め込みコンテンツ配信ネットワーク (eCDN) を構成して、ファネルの上部にあるページリクエストをコンポーザブルストアフロントに送信します: ホームページ (/)、カテゴリ一覧ページ (/category)、および商品詳細ページ (/product)。これらのページは、mystorefront.mobify-storefront.com で実行されているマネージド ランタイム (MRT) 環境にデプロイされます。買い物客が購入を決定すると、eCDN は買い物客をwww.mystorefront.comで実行されている既存の SFRA/SG チェックアウトページにリダイレクトします。
MRT へのトラフィックのルーティングの詳細については、以下を参照してください。
1 または 2 を実行します。
npx @salesforce/pwa-kit-create-app my-hybrid-storefrontまたは
sfcc.session_bridgeスコープが含まれていることを確認します。デフォルトでは、PWA Kit はナビゲーションに History API を使用します。買い物客が React Router のコンポーネントで作成されたリンクをクリックすると、app/routes.jsx で定義されたルートオブジェクトのパスと一致するコンポーネントへのソフトナビゲーションがトリガーされます。PWA Kit 以外のページ (たとえば SFRA によるページ) にリンクするには、app/routes.jsx の URL パス名と一致するルートをすべて削除する必要があります。
PWA Kit プロジェクトがテンプレート拡張を使用する Retail React Appテンプレートのバージョン 3.x で生成された場合は、overrides/app/routes.jsxファイルをオーバーライドして、JavaScript を使用して PWA Kit 以外のページへのリンクを除外できます。
/cartルートと/checkoutルートを除外するために、すべての変更を行ったoverrides/app/routes.jsxファイルのオーバーライドの例を作成しました。このパブリック Gistのオーバーライド コードの例をカスタマイズして、PWA Kit 以外のページへのリンクを除外します。
最後に、app/routes.jsx の PWA キャッチオールルート (/*) を更新します。PWA <PageNotFound /> コンポーネントをデフォルトのオリジンのリダイレクトに置き換えます。
1import {withRouter} from 'react-router-dom'
2 ...
3 {
4 path: '*',
5 component: withRouter((props) => {
6 const {location} = props
7 const urlParams = new URLSearchParams(location.search)
8
9 useEffect(() => {
10 const newURL = new URL(window.location)
11 if (!urlParams.has('redirected')) {
12 newURL.searchParams.append('redirected', '1')
13 window.location.href = newURL
14 }
15
16 }, [window.location.href])
17 if (urlParams.has('redirected')) {
18 return <PageNotFound {...props} />
19 }
20 return null
21 })
22 }@salesforce/commerce-sdk-react@3.2.0**以降にアップグレードしてください。ハイブリッド認証が有効になっている場合、SLAS /oauth2/token要求には、応答のSet-Cookieヘッダーを使用するセッション ブリッジされたdwsidが含まれます。
Managed Runtime で、Cookie パススルーを有効にします。
これらの手順は、以前にハイブリッド ストアフロントでプラグイン SLAS を使用していた場合にのみ適用されます。新しいハイブリッドストアフロントがあり、以前にプラグイン SLAS を使用したことがない場合は、これらの手順を省略できます。
Note
B2C Commerce ハイブリッド認証への移行に伴い、PWA Kit はプラグイン SLAS を使用しなくなりました。ハイブリッドストアフロントからプラグイン SLAS を削除するには:
SFRA のみのサイトでは、買い物客のログイン拡張機能でハイブリッド認証が有効になっている場合、DNT 値は拡張セッションに自動的に同期され、セッション間でシームレスな体験が確保されます。
ハイブリッド認証と DNT 同期の両方を有効にすると、一方のサイトで買い物客が提供した追跡の同意が、もう一方のサイトと自動的に同期されます。たとえば、ホームページが PWA Kit で実行され、買い物カゴページが SFRA で実行されるハイブリッドサイトでは、次のようになります。
デフォルトの DNT 実装をカスタマイズした場合、またはカスタマイズする予定がある場合、デフォルトの同期は必要なく、期待どおりに機能しない可能性があります。このような場合は、サイト環境設定を使用して DNT 同期を無効にできます。DNT 同期がオフになっている場合でも、ハイブリッド認証を有効にできます。
SFRA と PWA Kit では、DNT Cookie の有効期限に重要な違いがあります。
買い物客が PWA Kit ページから SFRA ページに移動すると、DNT Cookie の有効期限が、リフレッシュトークンの有効期限からセッションベースの有効期限に変更されます。買い物客がブラウザーを閉じると、Cookie は削除されます。その結果、買い物客が戻ってきたときに、追跡同意バナーが予想通りに再び表示されます。
ハイブリッド設定はローカル環境でテストすることを強くお勧めします。eCDN は SIG と ODS をサポートしていないため、これを行うにはリバースプロキシを設定する必要があります。ハイブリッドサイトを SIG インスタンスでローカルにセットアップしてテストするには、独自のリバースプロキシまたは CDN を使用してトラフィックを分割する必要があります。
PWA Kit と SFRA/SiteGenesis にわたるハイブリッドデプロイの買い物客フローの開発とテストに使用できるサンプル Node.js アプリを作成しました。 リバース プロキシを設定するためのセットアップ、構成、およびテストの手順は、リポジトリのREADMEに記載されています。
ODS は、本番構成と同様のエイリアスの構成を使用するように構成できます。これにより、ローカルと本番の設定を同じに保つことができます。たとえば、ハイブリッドサイトが / URI で利用できるようにサンドボックスを構成すると、pwa-kit によって送信される URL を、サイト ID を含めるために変換する必要がなくなります。これが通常の本番サイトの構成方法です。
Business Manager でエイリアスを有効にするには、Trailhead の Salesforce B2C Commerce ホスト名エイリアスのモジュールの手順に従ってください。
PWA Kit のルート構成を構成して、すべての発信 URL (たとえば SFRA 向けのもの) に接頭辞 /s/SiteID を含めることができます。これにより、ホスト名のエイリアスを明示的に構成する必要がなく、インスタンスはサンドボックスで通常使用される方法でコントローラー URL を受信できるようになります。これは本番環境の構成には適切ではないこともあるため、本番デプロイとサンドボックスデプロイでは異なるキャッチオールルートが必要になる場合があることにご注意ください。
ルートの接頭辞を構成するには、app/routes.jsxまたは overrides/app/routes.jsx の PWA キャッチオールルート (/*) を更新します。
1import {withRouter} from 'react-router-dom'
2// extensible
3import useMultiSite from '@salesforce/retail-react-app/app/hooks/use-multi-site';
4// non-extensible
5import useMultiSite from './hooks/use-multi-site';
6
7const DEFAULT_SITE_ID = 'RefArch'
8...
9 {
10 path: '*',
11 component: withRouter((props) => {
12 const {location} = props
13 const urlParams = new URLSearchParams(location.search)
14 const {site} = useMultiSite()
15 const siteId = site && site.id ? site.id : DEFAULT_SITE_ID
16 useEffect(() => {
17 const newURL = new URL(window.location)
18 if (!urlParams.has('redirected')) {
19 newURL.searchParams.append('redirected', '1')
20 newURL.pathname = `/s/${siteId}/${window.location.pathname
21 .split('/')
22 .slice(2)
23 .join('/')}`
24 window.location.replace(newURL)
25 }
26 }, [window.location.href])
27 if (urlParams.has('redirected')) {
28 return <PageNotFound {...props} />
29 }
30 return null
31 })
32}