verifyJWT types
This commit is contained in:
1 parent
52a6b4c9fa
commit
db9d5cf5e4
1 file changed
+11
-5
@@ -3,10 +3,15 @@ import { NextFunction, Request, Response } from "express";
|
||||
import jwt from "jsonwebtoken";
|
||||
import { AppError } from "@/utils/AppError.js";
|
||||
import { Settings } from "@/types/settings.js";
|
||||
import type { User } from "@/types/user.js";
|
||||
|
||||
const SERVICE_NAME = "verifyJWT";
|
||||
const TOKEN_PREFIX = "Bearer ";
|
||||
|
||||
const isUser = (payload: unknown): payload is User => {
|
||||
return typeof payload === "object" && payload !== null && "id" in payload && "teamId" in payload && "role" in payload;
|
||||
};
|
||||
|
||||
export const createVerifyJWT = (settingsService: { getSettings: () => Settings }) => {
|
||||
return (req: Request, res: Response, next: NextFunction) => {
|
||||
const token = req.headers["authorization"];
|
||||
@@ -31,21 +36,22 @@ export const createVerifyJWT = (settingsService: { getSettings: () => Settings }
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
jwt.verify(parsedToken, jwtSecret, (err: any, decoded: any) => {
|
||||
jwt.verify(parsedToken, jwtSecret, (err: jwt.VerifyErrors | null, decoded: jwt.JwtPayload | string | undefined) => {
|
||||
if (err) {
|
||||
const error = new AppError({
|
||||
message: "Failed to authenticate token",
|
||||
details: err,
|
||||
message: err instanceof Error ? err.message : "Failed to authenticate token",
|
||||
status: 401,
|
||||
service: SERVICE_NAME,
|
||||
details: err instanceof Error ? { error: err } : undefined,
|
||||
method: "verifyJWT",
|
||||
});
|
||||
next(error);
|
||||
return;
|
||||
} else {
|
||||
// Token is valid, carry on
|
||||
} else if (isUser(decoded)) {
|
||||
req.user = decoded;
|
||||
next();
|
||||
} else {
|
||||
next(new AppError({ message: "Invalid token payload", status: 401, service: SERVICE_NAME, method: "verifyJWT" }));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user