Commit 40609840 authored by wycers's avatar wycers
Browse files

user nav bar

parent 7330c0ba
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
import type { Config } from 'drizzle-kit';
export default {
	schema: './src/lib/drizzle/schema.ts',
	schema: './src/lib/server/drizzle/schema.ts',
	out: './src/lib/drizzle',
	driver: 'mysql2',
	dbCredentials: {
+10 −1
Original line number Diff line number Diff line
@@ -4,7 +4,16 @@ declare global {
	namespace App {
		// interface Error {}
		interface Locals {
			user: import('lucia').User | null;
			user: {
				id: number;
				name: string;
				createdAt: string;
				email: string;
				bio: string;
				image: string;
				updatedAt: string;
				sid: string;
			} | null | null;
			session: import('lucia').Session | null;
		}
		// interface PageData {}
+19 −3
Original line number Diff line number Diff line
import { lucia } from '$lib/auth.server';
import type { Handle } from '@sveltejs/kit';
import { lucia } from '$lib/server/auth';
import { db } from '$lib/server/db';
import { luciaUser } from '$lib/server/drizzle/schema';
import { redirect, type Handle } from '@sveltejs/kit';
import { eq } from 'drizzle-orm';

export const handle: Handle = async ({ event, resolve }) => {
	const sessionId = event.cookies.get(lucia.sessionCookieName);
@@ -10,6 +13,7 @@ export const handle: Handle = async ({ event, resolve }) => {
	}

	const { session, user } = await lucia.validateSession(sessionId);
	console.log(session, user);
	if (session && session.fresh) {
		const sessionCookie = lucia.createSessionCookie(session.id);
		// sveltekit types deviates from the de-facto standard
@@ -25,8 +29,20 @@ export const handle: Handle = async ({ event, resolve }) => {
			path: '.',
			...sessionCookie.attributes
		});
		event.locals.user = null;
		event.locals.session = null;
		return resolve(event);
	}

	const lu = await db.query.luciaUser.findFirst({
		where: eq(luciaUser.id, user!.id),
		with: { user: true }
	});
	if (!lu) {
		console.log('no user');
		redirect(302, '/login');
	}
	event.locals.user = user;
	event.locals.user = lu.user;
	event.locals.session = session;
	return resolve(event);
};
+14 −8
Original line number Diff line number Diff line
@@ -2,30 +2,36 @@
	import * as DropdownMenu from '$lib/components/ui/dropdown-menu';
	import * as Avatar from '$lib/components/ui/avatar';
	import { Button } from '$lib/components/ui/button';
	export let signoutForm;
	let signoutForm: HTMLFormElement;

	export let user: {
		name: string;
		sid: string;
		imageUrl: string;
	};
</script>

<DropdownMenu.Root>
	<DropdownMenu.Trigger asChild let:builder>
		<Button variant="ghost" builders={[builder]} class="relative h-8 w-8 rounded-full">
			<Avatar.Root class="h-8 w-8">
				<Avatar.Image src="/avatars/01.png" alt="@shadcn" />
				<Avatar.Fallback>SC</Avatar.Fallback>
				<Avatar.Image src={user.imageUrl} alt="@shadcn" />
				<Avatar.Fallback>{user.name.substring(0, 1)}</Avatar.Fallback>
			</Avatar.Root>
		</Button>
	</DropdownMenu.Trigger>
	<DropdownMenu.Content class="w-56" align="end">
		<DropdownMenu.Label class="font-normal">
			<div class="flex flex-col space-y-1">
				<p class="text-sm font-medium leading-none">shadcn</p>
				<p class="text-xs leading-none text-muted-foreground">m@example.com</p>
				<p class="text-sm font-medium leading-none">{user.name}</p>
				<p class="text-xs leading-none text-muted-foreground">{user.sid}</p>
			</div>
		</DropdownMenu.Label>
		<DropdownMenu.Separator />
		<DropdownMenu.Group>
			<DropdownMenu.Item>
				Profile
				<DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut>
				<!-- <DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut> -->
			</DropdownMenu.Item>
			<!-- <DropdownMenu.Item>
				Billing
@@ -33,7 +39,7 @@
			</DropdownMenu.Item> -->
			<DropdownMenu.Item>
				Settings
				<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>
				<!-- <DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut> -->
			</DropdownMenu.Item>
			<!-- <DropdownMenu.Item>New Team</DropdownMenu.Item> -->
		</DropdownMenu.Group>
@@ -41,7 +47,7 @@
		<form method="post" action="/sign-out" bind:this={signoutForm}>
			<DropdownMenu.Item on:click={() => signoutForm.submit()}>
				Log out
				<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>
				<!-- <DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut> -->
			</DropdownMenu.Item>
		</form>
	</DropdownMenu.Content>
+6 −6
Original line number Diff line number Diff line
import { Lucia } from 'lucia';
import { dev } from '$app/environment';

import { DrizzleMySQLAdapter } from '@lucia-auth/adapter-drizzle';

import { db } from '$lib/server/db';
import { luciaSession, luciaUser } from '$lib/server/drizzle/schema';

declare module 'lucia' {
	interface Register {
		Lucia: typeof lucia;
	}
}

import { DrizzleMySQLAdapter, DrizzlePostgreSQLAdapter } from '@lucia-auth/adapter-drizzle';

import { db } from './db/db.server';
import { luciaSession, luciaUser } from './drizzle/schema';
const adapter = new DrizzleMySQLAdapter(db, luciaSession, luciaUser);

export const lucia = new Lucia(adapter, {
Loading