LWR以外でログアウトさせる
Experience Cloudでログアウトさせるには、[/sitePrefix]/secur/logout.jsp
に遷移させます。
PageReferenceを使ったログアウトは下記になるのですが、Build Your Own (LWR) テンプレートではサポートされません1。
this[NavigationMixin.Navigate]({
type: "comm__loginPage",
attributes: {
actionName: "logout"
}
});
basePathからログアウトURLを取得する
LWRではかわりにbasePathからURLを取得します。basePathは/s
を含むので、取り除く必要があります。
import { LightningElement, api } from "lwc";
import basePath from "@salesforce/community/basePath";
export default class Logout extends LightningElement {
get logoutLink() {
const sitePrefix = basePath.replace(/\/s$/i, "");
return sitePrefix + "/secur/logout.jsp";
}
}
<a href={logoutLink}>Logout</a>
javascriptの処理の中でログアウトさせる
上記の方法でstandard__webPage
のurlを指定してページ遷移させようとすると、[/sitePrefix]/s
が余計についてしまうので正しいURLが指定できません。Navigateのかわりにfetch apiを使うことでうまく遷移できます。
logoutUrlはgetLogoutUrlを使用することでも取得できます。
import getLogoutUrl from '@salesforce/apex/applauncher.IdentityHeaderController.getLogoutUrl';
import getLoginUrl from '@salesforce/apex/system.Network.getLoginUrl';
fetch apiを使うことでJavaScriptでログアウトさせることができます。
import getLogoutUrl from '@salesforce/apex/applauncher.IdentityHeaderController.getLogoutUrl';
export default class Logout extends LightningElement {
async logout() {
const logoutUrl = await getLogoutUrl();
await fetch(logoutUrl);
// 上記だけだとページ遷移しないので、ページ遷移する場合はここにページ遷移の処理を入れる
}
}
参考
- Create a Logout Link Component | LWR Sites for Experience Cloud | Salesforce Developers
- lightning web components - How to logout from a Digital Experience (AKA Community) using LWC? - Salesforce Stack Exchange
- Basic Navigation - Salesforce Lightning Component Library
- PageReference Types - Salesforce Lightning Component Library