Use a hidden form to do POST based logout (#34694)

Closes #32648

Signed-off-by: Jon Koops <jonkoops@gmail.com>
This commit is contained in:
Jon Koops 2024-11-06 14:02:30 +01:00 committed by GitHub
parent a9c3e592f3
commit b2930a4799
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1299,30 +1299,33 @@ function Keycloak (config) {
return; return;
} }
const logoutUrl = kc.createLogoutUrl(options); // Create form to send POST request.
const response = await fetch(logoutUrl, { const form = document.createElement("form");
method: "POST",
headers: { form.setAttribute("method", "POST");
"Content-Type": "application/x-www-form-urlencoded" form.setAttribute("action", kc.createLogoutUrl(options));
}, form.style.display = "none";
body: new URLSearchParams({
// Add data to form as hidden input fields.
const data = {
id_token_hint: kc.idToken, id_token_hint: kc.idToken,
client_id: kc.clientId, client_id: kc.clientId,
post_logout_redirect_uri: adapter.redirectUri(options, false) post_logout_redirect_uri: adapter.redirectUri(options, false)
}) };
});
if (response.redirected) { for (const [name, value] of Object.entries(data)) {
window.location.href = response.url; const input = document.createElement("input");
return;
input.setAttribute("type", "hidden");
input.setAttribute("name", name);
input.setAttribute("value", value);
form.appendChild(input);
} }
if (response.ok) { // Append form to page and submit it to perform logout and redirect.
window.location.reload(); document.body.appendChild(form);
return; form.submit();
}
throw new Error("Logout failed, request returned an error code.");
}, },
register: async function(options) { register: async function(options) {