diff --git a/server/routers/auth/index.ts b/server/routers/auth/index.ts index 30490028..e9d2f5d8 100644 --- a/server/routers/auth/index.ts +++ b/server/routers/auth/index.ts @@ -1,2 +1,3 @@ export * from "./login"; export * from "./signup"; +export * from "./logout"; diff --git a/server/routers/auth/logout.ts b/server/routers/auth/logout.ts new file mode 100644 index 00000000..b3806ae5 --- /dev/null +++ b/server/routers/auth/logout.ts @@ -0,0 +1,35 @@ +import { Request, Response, NextFunction } from "express"; +import { lucia } from "@server/auth"; +import createHttpError from "http-errors"; +import HttpCode from "@server/types/HttpCode"; +import response from "@server/utils/response"; + +export async function logout( + req: Request, + res: Response, + next: NextFunction, +): Promise { + const sessionId = req.cookies[lucia.sessionCookieName]; + + if (!sessionId) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "You must be logged in to sign out", + ), + ); + } + + await lucia.invalidateSession(sessionId); + res.setHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize()); + + return res.status(HttpCode.OK).send( + response({ + data: null, + success: true, + error: false, + message: "Logged out successfully", + status: HttpCode.OK, + }), + ); +} diff --git a/server/routers/external.ts b/server/routers/external.ts index edfdd891..952b9570 100644 --- a/server/routers/external.ts +++ b/server/routers/external.ts @@ -46,3 +46,4 @@ unauthenticated.use("/auth", authRouter); authRouter.put("/signup", auth.signup); authRouter.post("/login", auth.login); +authRouter.post("/logout", auth.logout);