Greet user (#21)

* ignore underscores

* great user and redirect to login on /app

* format

* pass user as property of data object
This commit is contained in:
Baobeld 2024-12-19 22:24:44 -05:00 committed by GitHub
parent 6ddaa69f69
commit abc30a2a03
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 59 additions and 7 deletions

View file

@ -30,5 +30,17 @@ export default ts.config(
parser: ts.parser, parser: ts.parser,
}, },
}, },
},
{
rules: {
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
},
],
},
} }
); );

View file

@ -1,11 +1,13 @@
<script lang="ts"> <script lang="ts">
let { title }: { title: string } = $props(); let { title, username }: { title: string; username: string } = $props();
let greeting = $derived(`Welcome ${username}!`);
</script> </script>
<header class="navbar justify-between bg-base-200 px-4"> <header class="navbar justify-between bg-base-200 px-4">
<h2 class="prose prose-xl">Hestia</h2> <h2 class="prose prose-xl">Hestia</h2>
<h1 class="prose prose-2xl">{title}</h1> <h1 class="prose prose-2xl">{title}</h1>
<p class="prose prose-lg">Welcome!</p> <p class="prose prose-lg">{greeting}</p>
</header> </header>
<style> <style>

View file

@ -1,5 +1,6 @@
import { prisma } from '$lib/server/prisma'; import { prisma } from '$lib/server/prisma';
import { redirect } from '@sveltejs/kit'; import { redirect } from '@sveltejs/kit';
export async function load(event) { export async function load(event) {
const sessionId = event.cookies.get('auth_session'); const sessionId = event.cookies.get('auth_session');
if (!sessionId) { if (!sessionId) {
@ -11,7 +12,7 @@ export async function load(event) {
}, },
}); });
if (!user) { if (!user) {
redirect(401, '/login'); redirect(300, '/login');
} }
return {}; return {};
} }

View file

@ -0,0 +1,26 @@
import { prisma } from '$lib/server/prisma';
import { redirect } from '@sveltejs/kit';
import dayjs from 'dayjs';
export async function load(event) {
const sessionId = event.cookies.get('auth_session');
if (!sessionId) {
redirect(300, '/login');
}
const session = await prisma.session.findUnique({
where: { id: sessionId },
include: { user: true },
});
if (!session) {
redirect(300, '/login');
}
const expiry = session.expiresAt;
if (dayjs(expiry).isBefore(dayjs())) {
redirect(300, '/login');
}
const { password: _, ...rest } = session.user;
return {
user: rest,
};
}

View file

@ -1,8 +1,17 @@
<script lang="ts"> <script lang="ts">
import { Navbar } from '$lib/components/Navigation'; import { Navbar } from '$lib/components/Navigation';
import type { User } from '@prisma/client';
import type { Snippet } from 'svelte';
let { children } = $props(); type Props = {
children: Snippet;
data: {
user: Omit<User, 'password'>;
};
};
let { children, data }: Props = $props();
</script> </script>
<Navbar title="Svelte" /> <Navbar title="Svelte" username={data.user.name} />
{@render children()} {@render children()}

View file

@ -0,0 +1,2 @@
<script lang="ts">
</script>