nuxt-users
Version:
A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools
41 lines (40 loc) • 1.78 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(async (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, fetchUser, initializeUser } = useAuthentication();
if (!isAuthenticated.value) {
await initializeUser();
}
if (!isAuthenticated.value && to.query?.oauth_success === "true") {
try {
await fetchUser(true);
} catch (error) {
console.error("[Nuxt Users] Failed to fetch user after OAuth:", error);
}
}
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");
}
});