added super basic JWT mockups
This commit is contained in:
@ -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
26
src/lib/User.svelte
Normal 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}
|
@ -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">
|
||||
|
13
src/routes/api/auth/+server.ts
Normal file
13
src/routes/api/auth/+server.ts
Normal 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 });
|
||||
}
|
24
src/routes/api/auth/session/+server.js
Normal file
24
src/routes/api/auth/session/+server.js
Normal 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.');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user