UNPKG

nuxt-users

Version:

A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools

36 lines (35 loc) 1.62 kB
import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from "#app"; import { useAuthentication } from "../composables/useAuthentication.js"; import { hasPermission, isWhitelisted } from "../utils/permissions.js"; import { NO_AUTH_PATHS, NO_AUTH_API_PATHS } from "../constants.js"; export default defineNuxtRouteMiddleware((to) => { const { public: { nuxtUsers: publicNuxtUsers } } = useRuntimeConfig(); const publicOptions = publicNuxtUsers; const base = publicOptions.apiBasePath || "/api/nuxt-users"; if (NO_AUTH_PATHS.includes(to.path)) { console.log(`[Nuxt Users] client.middleware.auth.global: ${to.path}`); return; } const openApiPaths = NO_AUTH_API_PATHS.map((path) => `${base}${path}`); if (openApiPaths.includes(to.path)) { return; } if (isWhitelisted(to.path, publicOptions.auth.whitelist)) { console.log(`[Nuxt Users] client.middleware.auth.global: Whitelisted: ${to.path}`); return; } const { isAuthenticated, user } = useAuthentication(); if (!isAuthenticated.value) { console.log(`[Nuxt Users] client.middleware.auth.global: Unauthenticated ${to.path}, redirecting to /login`); return navigateTo("/login"); } if (!user.value || !hasPermission(user.value.role, to.path, "GET", publicOptions.auth.permissions)) { console.log(`[Nuxt Users] client.middleware.auth.global: User with role ${user.value?.role} denied access to ${to.path}`); return navigateTo("/login"); } console.log("[Nuxt Users] client.middleware.auth.global", { isAuthenticated: isAuthenticated.value, userRole: user.value?.role, to: to.path }); });