Neah/components/auth/signout-handler.tsx
2025-05-02 10:58:27 +02:00

58 lines
1.7 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { signOut, useSession } from "next-auth/react";
import { clearAuthCookies } from "@/lib/session";
export function SignOutHandler() {
const { data: session } = useSession();
useEffect(() => {
const handleSignOut = async () => {
try {
// Clear all auth-related cookies
clearAuthCookies();
// First sign out from NextAuth with redirect false
await signOut({
redirect: false
});
// Then redirect to Keycloak logout with proper parameters
if (process.env.NEXT_PUBLIC_KEYCLOAK_ISSUER) {
const keycloakLogoutUrl = new URL(
`${process.env.NEXT_PUBLIC_KEYCLOAK_ISSUER}/protocol/openid-connect/logout`
);
// Add required parameters
keycloakLogoutUrl.searchParams.append(
'post_logout_redirect_uri',
`${window.location.origin}/signin?signedOut=true`
);
// Add id_token_hint if available
if (session?.accessToken) {
keycloakLogoutUrl.searchParams.append(
'id_token_hint',
session.accessToken
);
}
// Redirect to Keycloak logout
window.location.href = keycloakLogoutUrl.toString();
} else {
// Fallback if no Keycloak issuer is configured
window.location.href = '/signin?signedOut=true';
}
} catch (error) {
console.error('Error during logout:', error);
// Fallback if something goes wrong
window.location.href = '/signin?signedOut=true';
}
};
handleSignOut();
}, [session]);
return null;
}