58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
import { BASE_API_URI } from "$lib/utils/constants";
|
|
import { fail, redirect } from "@sveltejs/kit";
|
|
|
|
/** @type {import('./$types').PageServerLoad} */
|
|
export async function load({ locals }) {
|
|
// redirect user if not logged in
|
|
if (!locals.user) {
|
|
throw redirect(302, `/auth/login?next=/`);
|
|
}
|
|
}
|
|
|
|
/** @type {import('./$types').Actions} */
|
|
export const actions = {
|
|
default: async ({ fetch, cookies }) => {
|
|
/** @type {RequestInit} */
|
|
const requestInitOptions = {
|
|
method: "POST",
|
|
credentials: "include",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Cookie: `jwt=${cookies.get("jwt")}`,
|
|
},
|
|
};
|
|
|
|
const res = await fetch(
|
|
`${BASE_API_URI}/backend/users/logout/`,
|
|
requestInitOptions
|
|
);
|
|
|
|
if (!res.ok) {
|
|
const response = await res.json();
|
|
const errors = [];
|
|
errors.push({ error: response.error, id: 0 });
|
|
return fail(400, { errors: errors });
|
|
}
|
|
|
|
// eat the cookie
|
|
cookies.delete("jwt", { path: "/" });
|
|
|
|
// The server should clear the cookie, so we don't need to handle it here
|
|
// Just check if the cookie is cleared in the response
|
|
const setCookieHeader = res.headers.get("set-cookie");
|
|
if (!setCookieHeader || !setCookieHeader.includes("jwt=;")) {
|
|
console.error("JWT cookie not cleared in response");
|
|
return fail(500, {
|
|
errors: [
|
|
{
|
|
error: "Server error: Failed to clear authentication token",
|
|
id: Date.now(),
|
|
},
|
|
],
|
|
});
|
|
}
|
|
// redirect the user
|
|
throw redirect(302, "/auth/login");
|
|
},
|
|
};
|