port-nimara-client-portal/middleware/authentication.ts

35 lines
816 B
TypeScript
Raw Normal View History

export default defineNuxtRouteMiddleware(async (to) => {
// Skip auth for SSR
if (import.meta.server) return;
2025-02-16 13:10:19 +01:00
// Check if auth is required (default true unless explicitly set to false)
const isAuthRequired = to.meta.auth !== false;
// Check Keycloak auth first
const oidc = useOidc();
if (oidc.isLoggedIn) {
// User authenticated with Keycloak
return;
}
2025-02-16 13:10:19 +01:00
// Fall back to Directus auth
const { fetchUser, setUser } = useDirectusAuth();
const directusUser = useDirectusUser();
if (!directusUser.value) {
2025-02-16 13:10:19 +01:00
const user = await fetchUser();
setUser(user.value);
}
if (directusUser.value) {
// User authenticated with Directus
return;
}
// No authentication found
if (isAuthRequired) {
// Redirect to login page
return navigateTo('/login');
2025-02-16 13:10:19 +01:00
}
});