71 lines
2.2 KiB
TypeScript
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" };
|
|
}
|
|
});
|