Configure and use the nuxt-users module for Nuxt 3 and Nuxt 4. Use when adding authentication, user management, roles, password reset, database setup (SQLite/MySQL/PostgreSQL), or CLI commands (migrate, create-user). Covers nuxt.config (nuxtUsers), composables (useAuthentication, useUsers, usePublicPaths, usePasswordValidation, useNuxtUsersLocale), components (NUsersLoginForm, NUsersLogoutLink, etc.), and authorization (whitelist, permissions).
66
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Install the module and peer dependencies
npm install nuxt-users
npm install db0 better-sqlite3 bcrypt nodemailerFor MySQL or PostgreSQL, install the corresponding driver (mysql2 or pg) instead of or in addition to better-sqlite3 as required.
Register the module in nuxt.config.ts
export default defineNuxtConfig({
modules: ['nuxt-users']
})Run migrations
From the project root (where nuxt.config.ts lives):
npx nuxt-users migrateCreate at least one user
npx nuxt-users create-user -e admin@example.com -n "Admin User" -p password123 -r adminFlags: -e email, -n name, -p password, -r role (optional).
Configure permissions
export default defineNuxtConfig({
modules: ['nuxt-users'],
nuxtUsers: {
auth: {
permissions: {
admin: ['*'],
user: ['/profile', '/api/nuxt-users/me']
}
}
}
})Use login in a page
NUsersLoginForm component and handle @success by calling login(user) from useAuthentication().navigateTo('/')).All options live under nuxtUsers in nuxt.config.ts.
| Area | Key | Notes |
|---|---|---|
| Database | connector.name | 'sqlite' | 'mysql' | 'postgresql' |
| Database | connector.options | path (SQLite), or host, port, user, password, database (MySQL/PostgreSQL) |
| API | apiBasePath | Default '/api/nuxt-users' |
| Tables | tables.users, tables.personalAccessTokens, tables.passwordResetTokens, tables.migrations | Custom table names |
| Mailer | mailer | Nodemailer config for password reset emails |
| URLs | passwordResetUrl, emailConfirmationUrl | Paths for redirects |
| Auth | auth.whitelist | Public routes (e.g. ['/register']); /login is always public |
| Auth | auth.tokenExpiration | Minutes (default 1440) |
| Auth | auth.rememberMeExpiration | Days (default 30) |
| Auth | auth.permissions | Role → paths (e.g. admin: ['*'], user: ['/profile']) |
| Auth | auth.google | Google OAuth: clientId, clientSecret, callbackUrl, etc. |
| Password | passwordValidation | minLength, requireUppercase, requireLowercase, requireNumbers, requireSpecialChars, preventCommonPasswords |
| Data | hardDelete | true = hard delete, false = soft delete (default) |
| Locale | locale.default, locale.texts, locale.fallbackLocale | Localization |
Runtime config is also supported: use runtimeConfig.nuxtUsers for env-based or server-only settings.
Run from the project root so nuxt.config.ts (and optionally .env) are found.
Migrations
npx nuxt-users migrateCreate user
npx nuxt-users create-user -e <email> -n "<name>" -p <password> [-r <role>]Legacy/table creation
npx nuxt-users create-users-table
npx nuxt-users create-personal-access-tokens-table
npx nuxt-users create-password-reset-tokens-table
npx nuxt-users create-migrations-tableProduction: The CLI requires
nuxt-users(and peers) installed where Node runs — it is not bundled inside.output/. Full config needs the app root withnuxt.config; build-only or--omit=devdeploys fall back toDB_*env vars. Seedocs/user-guide/configuration.md.
user, isAuthenticated, login(user, rememberMe?), logout(), fetchUser(useSSR?), initializeUser()users, pagination, loading, error, fetchUsers(page?, limit?), updateUser, addUser, removeUser(userId)getPublicPaths(), getAccessiblePaths(), isPublicPath(path), isAccessiblePath(path, method?)validate(password), isValid, errors, strength, score, clearValidation()t(key, params?), currentLocale, fallbackLocaleNUsersLoginForm — Login form; use @success to call login(user) from useAuthentication()NUsersLogoutLink — Logout link/buttonNUsersProfileInfo — Display profileNUsersResetPasswordForm — Password reset formNUsersList — List users (admin)NUsersUserForm — Create/edit user form| Symptom | Fix |
|---|---|
| Redirected to login on protected routes | Set auth.permissions so each role has access to needed routes |
| CLI config not found / wrong tables | Run CLI from the directory containing nuxt.config; see production note above |
| Migrations table missing | Run npx nuxt-users migrate from project root |
| Database driver errors | Install correct peer: SQLite → better-sqlite3, MySQL → mysql2, PostgreSQL → pg |
../../docs/user-guide/getting-started.md, ../../docs/examples/basic-setup.md../../docs/user-guide/authorization.md../../docs/user-guide/configuration.mdKeep nuxtUsers config and permissions in sync with the app’s roles and routes; use guard clauses and early returns when implementing custom auth logic.
bc438e5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.