mirror of
https://github.com/JonasunderscoreJones/dash.jonasjones.dev.git
synced 2025-10-22 23:49:20 +02:00
added signup page
This commit is contained in:
parent
5358ea670f
commit
b10ce76b7d
1 changed files with 126 additions and 0 deletions
126
src/routes/signup/+page.svelte
Normal file
126
src/routes/signup/+page.svelte
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<script>
|
||||||
|
import { navigate } from 'svelte-routing';
|
||||||
|
import { setSessionKey } from '../../utils/session.js';
|
||||||
|
let email = '';
|
||||||
|
let password = '';
|
||||||
|
let errorMessage = '';
|
||||||
|
|
||||||
|
const handleLogin = async () => {
|
||||||
|
try {
|
||||||
|
const response = await fetch('https://accounts.jonasjones.dev/login', {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify({ email, password }),
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (data.sessionKey) {
|
||||||
|
// Set session key as a cookie
|
||||||
|
setSessionKey(data.sessionKey);
|
||||||
|
// Get the return URL from query parameters
|
||||||
|
const returnUrl = new URLSearchParams(window.location.search).get('returnUrl') || '/';
|
||||||
|
navigate(returnUrl); // Redirect back to the requested path
|
||||||
|
} else {
|
||||||
|
errorMessage = 'Invalid login credentials';
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
errorMessage = 'Error logging in. Please try again later.';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="login-container">
|
||||||
|
<div class="login-prompt">
|
||||||
|
<h1>Login</h1>
|
||||||
|
|
||||||
|
{#if errorMessage}
|
||||||
|
<p style="color: red;">{errorMessage}</p>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<form on:submit|preventDefault={handleLogin}>
|
||||||
|
<label for="username">Username:</label>
|
||||||
|
<input id="username" bind:value={email} required />
|
||||||
|
|
||||||
|
<label for="password">Password:</label>
|
||||||
|
<input type="password" id="password" bind:value={password} required />
|
||||||
|
|
||||||
|
<p>Have no account? <a href="/register">Register!</a></p>
|
||||||
|
|
||||||
|
<button type="submit">Login</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.login-container {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
position: fixed;
|
||||||
|
top: 50px;
|
||||||
|
left: 0;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-prompt {
|
||||||
|
background-color: black;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
border: 1px solid #222222;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgb(44, 44, 44);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus {
|
||||||
|
border-color: #036300;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #036300;
|
||||||
|
color: white;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
transition: background-color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #0056b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Add table
Add a link
Reference in a new issue