Skip to content

Commit

Permalink
Added authorization middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabrice-Dush committed May 28, 2024
1 parent 15533e4 commit 116bafa
Showing 1 changed file with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/middlewares/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";
import Users, { UsersAttributes } from "../databases/models/users";

const SECRET: string = process.env.JWT_SECRET;

interface ExtendedRequest extends Request {
user: UsersAttributes;
}

export const protect = async function (
req: ExtendedRequest,
res: Response,
next: NextFunction
) {
try {
//? 1. Get token and check if it's there
let token: string;
if (req.headers.authorization?.startsWith("Bearer")) {
token = req.headers.authorization.split(" ").at(-1);
}

if (!token) throw new Error("Login to get access to this resource");

//? 2. Validate the token to see if it is valid or if it has not expired
const decoded: any = await jwt.verify(token, SECRET);

//? 3. Check if the user still exists
const user = await Users.findByPk(decoded.id);
if (!user) {
throw new Error("User belonging to this token does not exist");
}

//?4. Grant access to the protected route
req.user = user;
next();
} catch (err: any) {
console.log(err);
let message: string;
if (err.name === "JsonWebTokenError" || err.name === "TokenExpiredError") {
message = "Invalid token. Log in again to get a new one";
} else {
message = err.message;
}
res.status(401).json({ ok: false, status: "fail", message: message });
}
};

0 comments on commit 116bafa

Please sign in to comment.