39 lines
1011 B
TypeScript
39 lines
1011 B
TypeScript
import { SESSION_COOKIE_NAME } from "../auth/token";
|
|
import { services } from "../services";
|
|
import type { Call, Result, Route } from "../types";
|
|
import { redirect } from "../request/util";
|
|
|
|
const logoutHandler = async (call: Call): Promise<Result> => {
|
|
// Extract token from cookie and invalidate the session
|
|
const token = services.auth.extractToken(call.request);
|
|
if (token) {
|
|
await services.auth.logout(token);
|
|
}
|
|
|
|
// Clear the cookie and redirect to login
|
|
const redirectResult = redirect("/login");
|
|
redirectResult.cookies = [
|
|
{
|
|
name: SESSION_COOKIE_NAME,
|
|
value: "",
|
|
options: {
|
|
httpOnly: true,
|
|
secure: false,
|
|
sameSite: "lax",
|
|
maxAge: 0,
|
|
path: "/",
|
|
},
|
|
},
|
|
];
|
|
|
|
return redirectResult;
|
|
};
|
|
|
|
const logoutRoute: Route = {
|
|
path: "/logout",
|
|
methods: ["GET", "POST"],
|
|
handler: logoutHandler,
|
|
};
|
|
|
|
export { logoutRoute };
|