modular-auth
v1.1.2
Published
A Node.js auth plugin with JWT and zod validator, In which user can add more fields, validation, schema for auth
Maintainers
Readme
modular-auth
A flexible Node.js authentication plugin for Express, featuring JWT authentication, Zod validation, and dynamic schema extension. Easily add custom fields and validation to your auth flows. Built for modularity and extensibility.
Features
- JWT-based authentication
- Zod-powered request validation
- Easily extend registration schema with custom fields
- Password hashing with bcrypt
- Forgot password with email (via nodemailer)
- Customizable email templates for verification and password reset
- Mongoose model integration (uses your app's mongoose instance)
- TypeScript support
- Built-in middlewares:
authProtect,updatePasswordMiddleware
Installation
npm install modular-authUsage
1. Setup in your Express app
import express from 'express';
import mongoose from 'mongoose';
import Authentication from 'modular-auth';
await mongoose.connect('mongodb://localhost:27017/yourdb');
const auth = Authentication({
jwtSecret: 'your_jwt_secret',
smtp: {
user: 'your_email_user',
pass: 'your_email_pass',
service: 'gmail', // or host/port/secure
mailFrom: '[email protected]',
},
mongoose,
// Optional: provide a MongoDB URL (if not using an existing connection)
mongoDBUrl: 'mongodb://localhost:27017/yourdb',
// Optional: add extra signup fields validator
signUpExtraZodSchema: {
age: z.number({ required_error: 'age required' })
},
// Optional: add extra signup field with schema
extraUserSignUpFields: {
age: Number,
phone: String,
username: String
},
// Optional: custom response transformers
transformResponse: {
login: (user) => ({ token: user.token, user: user.user })
},
// Optional: custom email templates
mailTemplates: {
verifyMail: 'email template path',
forgotPassword: '<html>...your custom forgot password template...</html>'
}
});
const app = express();
app.use(express.json());
app.use('/api/auth', auth.authRoutes);
// Use built-in middlewares
app.use(auth.middleware.authProtect(/* ... */));
app.use(auth.middleware.updatePasswordMiddleware);
app.listen(3000);2. Extending Registration Schema
Add extra fields to registration by passing a Zod shape:
signUpExtraZodSchema: {
age: z.number({ required_error: 'age required' })
}3. Email Templates
You can customize the email templates for verification and password reset by providing your own HTML in the mailTemplates option or by editing the files in src/utils/EmailTemplates.ts.
Default templates:
verifyMail— Used for account verification emails. Supports{{name}}and{{verifyLink}}placeholders.forgotPassword— Used for password reset emails. Supports{{name}}and{{randomPassword}}placeholders.
Example (customizing):
mailTemplates: {
verifyMail: '<html>...your custom verify template...</html>',
forgotPassword: '<html>...your custom forgot password template...</html>'
}4. API Endpoints
POST /api/auth/register— Register a new userPOST /api/auth/login— Login and receive JWTPOST /api/auth/forgot-password— Receive a reset password emailPOST /api/auth/update-profile— Update user profile (protected)POST /api/auth/update-password— Change password (protected)
5. Customizing Responses
You can provide a transformResponse object to customize responses for specific routes:
transformResponse: {
login: (user) => ({ token: user.token, user: user.user })
}6. Using the User Model
Access the user model via:
const { userModel } = auth;7. Using Built-in Middlewares
Access built-in middlewares via:
const { middleware } = auth;
// middleware.authProtect
// middleware.updatePasswordMiddlewareLicense
ISC
Author
jkhan
