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
JavaScript
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
});
});