此文已使用 Salesforce 機器翻譯系統翻譯。更多詳細資料請參見此處。
在 B2C Commerce 版本 25.3 中,混合身份驗證 (auth) 取代了外掛程式 SLAS 外掛程式選項。
混合身份驗證 是一種獨立解決方案,適用於需要Storefront Reference Architecture (SFRA)/SiteGenesis (SG) 授權和Shopper Login and API Access Service (SLAS) 授權的網站實施。這意味著您需要 dwsid (SFRA/Site Genesis) 和 JSON Web 令牌 (SLAS),並且這些令牌必須保持同步。混合身份驗證是對外掛程式 SLAS 方法的改進,提供了一種更高效、更簡化的方法。
混合式驗證將此功能直接整合至 B2C Commerce 平台,可以改善混合式網店的效能和穩定性。
我們強烈建議遷移到混合身份驗證,以便您可以利用改進的性能和簡化的工作流程。
Note
本指南介紹如何為 混合網店 配置混合身份驗證,該網店既是 SFRA/SiteGenesis 的一部分,又是可組合網店。
有關混合身份驗證的詳細資訊,請參閱 混合身份驗證。
使用混合身份驗證的混合實施涉及的任務包括:
若要使用混合身份驗證,請使用以下命令構建網站:
commerce-sdk-react@3.3.0 或更高版本
Progressive Web App (PWA) 工具包版本 3.10 或更高版本
下表比較了外掛程式 SLAS 與混合身份驗證的 PWA Kit 功能支援。
| PWA Kit 中支援的功能名稱 | PWA Kit 中支援的外掛程式 SLAS | 。混合身份驗證 | 說明 |
|---|---|---|---|
| SiteGenesis | N | Y | |
| 第三方IDP和社交登錄 | N | 自2025年4月30日起部分支援。 |
|
| 無密碼登錄 | N | Y | |
| SLAS 私人客戶 | Y | Y | |
| SLAS 公共用戶端 | Y | N* | 混合身份驗證支援計劃在將來的版本中發佈。 |
| SLAS 可信系統 (TSOB) | N | Y | |
| Script API 「記住我」功能 | 不 | 適用
|
|
| 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 一起打包。 | |
| 請勿追蹤 (DNT) | N | Y | 您必須執行特定步驟來啟用和同步 DNT。請參閱 文檔指南。 |
| 購物者上下文 | N | Y |
|
| 控制器排除 | Y | N | 在混合身份驗證中,無需排除任何控制器。 |
| Cookie 設置自定義 | Y,通過自定義 | 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 頁面的連結。
我們創建了一個 overrides/app/routes.jsx 檔的範例覆蓋,其中包含所有更改以過濾掉 /cart 和 /checkout 路由。自定義此 公共 gist 中的示例重寫代碼,以篩選出指向非 PWA Kit 頁面的連結。
最後,在 app/routes.jsx 中更新 PWA 全部擷取 (catch-all) 路由 (/*)。將 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 的會話。
在託管運行時中,啟用 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 來拆分流量。
我們已建立一個範例 Node.js 應用程式,可用來開發及測試 PWA Kit 與 SFRA/SiteGenesis 之間的混合式部署購物者流程。 存儲庫的 README 中提到了設置反向代理的設置、配置和測試說明。
您可以將 ODS 設定為使用與 Production 設定類似的別名設定。這有助於讓本機和 Production 設定保持相同。例如,透過設定 Sandbox,讓混合式網站在 / URI 上可用,就能確保 pwa-kit 傳送的 URL 不需要轉換為包含網站 ID。這通常是 Production 網站的設定方式。
若要在 Business Manager 中啟用別名,請依照 Trailhead 上關於 Salesforce B2C Commerce 主機名稱別名的課程指示進行。
您可以將 PWA Kit 路由設定為所有傳出 URL (例如用於 SFRA 的 URL) 都加上前綴,以包含 /s/SiteID 前綴。這可確保您的執行個體是以通常用於 Sandbox 的方式接收控制器 URL,而不需要明確設定主機名稱別名。請注意,這可能不適合 Production 設定,所以您可能想要為 Production 和 Sandbox 部署使用不同的 catch-all 路由。
若要設定路由前綴,請在 app/routes.jsx 或 overrides/app/routes.jsx 中更新 PWA catch-all 路由 (/*)。
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}