Files
template-nuxtsim/server/api/auth/fullLogOut.post.ts

71 lines
2.2 KiB
TypeScript

// server/api/auth/logout.post.ts
export default defineEventHandler(async (event) => {
try {
const body = await readBody(event);
const { id_token_hint } = body;
if (!id_token_hint) {
return { success: false, error: "Missing id_token_hint" };
}
const config = useRuntimeConfig();
const keycloakIssuer = config.public.keycloakIssuer;
//const redirectUri = `${config.public.baseUrl}/auth/login`
const redirectUri = `${config.public.authUrl}/auth/login`;
// bentuk body sesuai standard OIDC logout
const params = new URLSearchParams({
id_token_hint,
post_logout_redirect_uri: redirectUri,
});
console.log(
"Making request to:",
`${keycloakIssuer}/protocol/openid-connect/logout`
);
// memanggil Keycloak logout endpoint
// await $fetch(`${keycloakIssuer}/protocol/openid-connect/logout`, {
// method: "POST",
// body: params.toString(),
// headers: {
// "Content-Type": "application/x-www-form-urlencoded",
// },
// // Tambahkan ini untuk detail response
// onResponse({ response }) {
// console.log("Status:", response.status);
// console.log("Status Text:", response.statusText);
// console.log("Headers:", response.headers);
// },
// onResponseError({ response }) {
// console.error("Error Status:", response.status);
// console.error("Error:", response._data);
// }
// });
const logoutResponse = await fetch(
`${keycloakIssuer}/protocol/openid-connect/logout`,
{
method: "POST",
body: params.toString(),
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
);
console.log(" Server: Response status:", logoutResponse.status);
if (logoutResponse.ok) {
console.log(" Server: Keycloak logout successful");
}
return {
success: true,
message: { params: `${keycloakIssuer}/protocol/openid-connect/logout?${params.toString()}`, keycloakIssuer: keycloakIssuer },
logoutUrl: redirectUri,
};
} catch (err) {
console.error("Logout API error:", err);
return { success: false, error: "Failed to logout from Keycloak" };
}
});