added super basic JWT mockups

This commit is contained in:
Samuel Andert
2023-08-25 14:59:02 +02:00
parent 3ab9976ce8
commit 52a6fa3005
8 changed files with 265 additions and 3 deletions

View File

@ -1,6 +1,14 @@
<script>
import Cookies from "js-cookie";
async function login() {
alert("login");
const response = await fetch("/api/auth", { method: "POST" });
if (!response.ok) {
alert("Login failed");
} else {
let { token } = await response.json();
Cookies.set("token", token);
alert(`Login Success: ${token}`);
}
}
</script>

26
src/lib/User.svelte Normal file
View File

@ -0,0 +1,26 @@
<script>
import { onMount } from "svelte";
import Cookies from "js-cookie";
let user = null;
onMount(async () => {
const token = Cookies.get("token");
const response = await fetch("/api/auth/session", {
headers: {
Authorization: `Bearer ${token}`,
},
});
if (response.ok) {
user = await response.json();
} else {
console.error("Failed to fetch user data");
}
});
</script>
{#if user}
<p>Welcome, {user.name}!</p>
{:else}
<p>Loading...</p>
{/if}

View File

@ -1,6 +1,7 @@
<script lang="ts">
import { createQuery } from "../lib/wundergraph";
import Login from "$lib/Login.svelte";
import User from "$lib/User.svelte";
const projectsQuery = createQuery({
operationName: "Projects",
@ -8,6 +9,8 @@
</script>
<Login />
<User />
<br />
Projects
<div class="results">

View File

@ -0,0 +1,13 @@
// src/routes/api/auth/+server.ts
import jwt from 'jsonwebtoken';
import { error } from '@sveltejs/kit';
const secretKey = 'mysecrettestkey';
export async function POST() {
const token = jwt.sign({ name: 'Samuel', loggedIn: true }, secretKey);
if (!token) {
throw error(400, 'No token created.');
}
return new Response(JSON.stringify({ token }), { status: 200 });
}

View File

@ -0,0 +1,24 @@
// src/routes/api/session/+server.ts
import jwt from 'jsonwebtoken';
import { error } from '@sveltejs/kit';
const secretKey = 'mysecrettestkey';
export async function GET({ request }) {
const authHeader = request.headers.get('Authorization');
if (!authHeader) {
throw error(401, 'No Authorization header provided.');
}
const token = authHeader.split(' ')[1];
if (!token) {
throw error(401, 'No token provided.');
}
try {
const user = jwt.verify(token, secretKey);
return new Response(JSON.stringify(user), { status: 200 });
} catch (err) {
throw error(401, 'Invalid token.');
}
}