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

41 lines
975 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 keycloak = useKeycloak();
// Initialize Keycloak if not already initialized
if (!keycloak.isInitialized.value) {
await keycloak.initKeycloak();
}
if (keycloak.isAuthenticated.value) {
// 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
}
});