42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
|
import { useEffect } from "react";
|
||
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||
|
import type { KcContext } from "../kcContext";
|
||
|
import type { I18n } from "../i18n";
|
||
|
|
||
|
export default function FrontchannelLogout(props: PageProps<Extract<KcContext, { pageId: "frontchannel-logout.ftl" }>, I18n>) {
|
||
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||
|
|
||
|
const { logout } = kcContext;
|
||
|
|
||
|
const { msg, msgStr } = i18n;
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (logout.logoutRedirectUri) {
|
||
|
window.location.replace(logout.logoutRedirectUri);
|
||
|
}
|
||
|
}, []);
|
||
|
|
||
|
return (
|
||
|
<Template
|
||
|
{...{ kcContext, i18n, doUseDefaultCss, classes }}
|
||
|
documentTitle={msgStr("frontchannel-logout.title")}
|
||
|
headerNode={msg("frontchannel-logout.title")}
|
||
|
>
|
||
|
<p>{msg("frontchannel-logout.message")}</p>
|
||
|
<ul>
|
||
|
{logout.clients.map(client => (
|
||
|
<li key={client.name}>
|
||
|
{client.name}
|
||
|
<iframe src={client.frontChannelLogoutUrl} style={{ "display": "none" }} />
|
||
|
</li>
|
||
|
))}
|
||
|
</ul>
|
||
|
{logout.logoutRedirectUri && (
|
||
|
<a id="continue" className="btn btn-primary" href={logout.logoutRedirectUri}>
|
||
|
{msg("doContinue")}
|
||
|
</a>
|
||
|
)}
|
||
|
</Template>
|
||
|
);
|
||
|
}
|