logout endpoint
This commit is contained in:
parent
bd2d0487e2
commit
52ebe1cb5a
5 changed files with 38 additions and 13 deletions
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
|
17
src/routes/api/auth/logout/+server.js
Normal file
17
src/routes/api/auth/logout/+server.js
Normal 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, '/');
|
||||||
|
}
|
Loading…
Reference in a new issue