UNPKG

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
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 }