nodly
Version:
Nodly is an interactive CLI for scaffolding modern Node.js/Express.js backend projects with instant setup for databases, mailers, queues, sockets, and more. Skip boilerplate and start building features fast.
58 lines (47 loc) • 1.76 kB
JavaScript
import dotenv from "dotenv";
import jwt from "jsonwebtoken";
dotenv.config();
// Secret key for signing JWTs
const JWT_SECRET = process.env.JWT_SECRET || "";
const JWT_EXPIRES_IN = process.env.JWT_EXPIRY || "5y"; // Token expiration time (adjust as needed)
// Generate a JWT with email, role, and datetime
export function generateToken(payload) {
return jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
}
// Generate a JWT for FORGOT PASSWORD with email, role, and datetime
export function generateForgotPasswordToken(email) {
const payload = {
email,
datetime: new Date().toISOString(), // Add current timestamp
};
return jwt.sign(payload, JWT_SECRET, { expiresIn: "5m" });
}
// Verify a JWT
export function verifyToken(token) {
try {
return jwt.verify(token, JWT_SECRET);
} catch (error) {
console.error("JWT verification error:", error);
return null; // Invalid token
}
}
// Decode a JWT without verifying (useful for extracting payload)
export function decodeToken(token) {
return jwt.decode(token);
}
// Middleware to protect routes
export function authenticateJWT(req, res, next) {
const authHeader = req.headers.authorization;
// Check if the Authorization header is present and starts with "Bearer "
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return res.status(401).json({ message: "Authorization token is required" });
}
// Extract the token from the Authorization header
const token = authHeader.split(" ")[1];
const decoded = verifyToken(token);
if (!decoded) {
return res.status(401).json({ message: "Invalid or expired token" });
}
req.user = decoded; // Attach user payload to the request object
next(); // Proceed to the next middleware or route
}