logout endpoint

This commit is contained in:
cirroskais 2024-04-24 23:26:22 -04:00
parent bd2d0487e2
commit 52ebe1cb5a
No known key found for this signature in database
GPG key ID: 5FC73EBF2678E33D
5 changed files with 38 additions and 13 deletions

View file

@ -1,3 +1,7 @@
<div class="px-3 py-1.5 flex space-x-1 hover:bg-neutral-600 transition-all"> <script>
export let href = '';
</script>
<a {href} class="flex px-3 py-1.5 space-x-1 transition-all hover:bg-neutral-600">
<slot /> <slot />
</div> </a>

View file

@ -1,25 +1,21 @@
<script> <script>
import { user } from '$lib/stores';
import HeaderLink from '$lib/components/HeaderLink.svelte'; import HeaderLink from '$lib/components/HeaderLink.svelte';
import Dropdown from '$lib/components/Dropdown.svelte'; import Dropdown from '$lib/components/Dropdown.svelte';
import DropdownButton from '$lib/components/DropdownButton.svelte'; import DropdownButton from '$lib/components/DropdownButton.svelte';
import { Cog, LogOut } from 'lucide-svelte';
</script> </script>
<div <div
class="w-full h-full py-auto flex px-4 place-content-between rounded-xl class="flex place-content-between px-4 w-full h-full rounded-xl transition-colors py-auto bg-neutral-200 dark:bg-neutral-900"
bg-neutral-200 dark:bg-neutral-900 transition-colors"
> >
<div class="my-auto flex space-x-4"> <div class="flex my-auto space-x-4">
<p class="my-auto text-xl hover:scale-105 focus:scale-105 active:scale-95 transition-all"> <p class="my-auto text-xl transition-all hover:scale-105 focus:scale-105 active:scale-95">
File Uploader File Uploader
</p> </p>
<div class="flex space-x-2 my-auto"> <div class="flex my-auto space-x-2">
<HeaderLink href="/dashboard">Dashboard</HeaderLink> <HeaderLink href="/dashboard">Dashboard</HeaderLink>
</div> </div>
</div> </div>
<div class="my-auto flex space-x-2"> <div class="flex my-auto space-x-2">
<Dropdown> <Dropdown>
<DropdownButton> <DropdownButton>
<p class="my-auto">Uploads</p> <p class="my-auto">Uploads</p>
@ -27,7 +23,7 @@
<DropdownButton> <DropdownButton>
<p class="my-auto">Settings</p> <p class="my-auto">Settings</p>
</DropdownButton> </DropdownButton>
<DropdownButton> <DropdownButton href="/api/auth/logout">
<p class="my-auto text-red-500">Logout</p> <p class="my-auto text-red-500">Logout</p>
</DropdownButton> </DropdownButton>
</Dropdown> </Dropdown>

View file

@ -61,3 +61,11 @@ export async function getSession(id) {
return session; return session;
} }
export async function deleteSession(id) {
if (!id) return false;
return await prisma.session.delete({
where: { id }
});
}

View file

@ -6,7 +6,7 @@ import { verifyHash } from '$lib/server/crypto';
/** @type {import('./$types').RequestHandler} */ /** @type {import('./$types').RequestHandler} */
export async function POST(event) { export async function POST(event) {
const { request, cookies, locals } = event; const { request, cookies } = event;
const body = await request.json(); const body = await request.json();
if (!body?.email || !email(body?.email)) if (!body?.email || !email(body?.email))

View file

@ -0,0 +1,17 @@
import { redirect } from '@sveltejs/kit';
import { getSession, deleteSession } from '$lib/server/database';
import { COOKIE } from '$lib/config';
/** @type {import('./$types').RequestHandler} */
export async function GET({ cookies }) {
const session = await getSession(cookies.get(COOKIE));
if (!session) {
cookies.delete(COOKIE, { path: '/' });
return redirect(302, '/');
}
await deleteSession(session.id);
cookies.delete(COOKIE, { path: '/' });
redirect(302, '/');
}