Skip to content

Commit 8e766f8

Browse files
committed
added cookies and login
1 parent d472bff commit 8e766f8

File tree

5 files changed

+119
-0
lines changed

5 files changed

+119
-0
lines changed

client/State.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import {user} from './store.js'

client/pages/Login.svelte

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<script>
2+
import {user} from './../store.js';
3+
4+
let username, password;
5+
let errorMessage = '';
6+
async function handleLogin(){
7+
const res = await fetch('/auth/login',{
8+
method: 'POST',
9+
headers: {
10+
'Accept': 'application/json',
11+
'Content-Type': 'application/json'
12+
},
13+
body: JSON.stringify({ "username": username, "password": password})
14+
});
15+
let loginResponse = await res.json();
16+
if (loginResponse.result == "error") {
17+
errorMessage = loginResponse.message;
18+
}else {
19+
const res = await fetch('/api/checkuser',{credentials: 'same-origin'});
20+
let stateResponse = await res.json();
21+
if (stateResponse.user_id !== '_') {
22+
user.set(stateResponse.user_id);
23+
}else
24+
{
25+
user.set('');
26+
}
27+
}
28+
}
29+
</script>
30+
31+
<div class="content">
32+
<div class="columns">
33+
<div class="column"></div>
34+
{#if !$user}
35+
<div class="column">
36+
{#if errorMessage}
37+
<div class="notification is-danger">
38+
{errorMessage}
39+
</div>
40+
{/if}
41+
<div class="field">
42+
<label class="label">Username</label>
43+
<div class="control has-icons-left">
44+
<input class="input" type="username" placeholder="username" bind:value={username}>
45+
<span class="icon is-small is-left">
46+
<i class="fas fa-user"></i>
47+
</span>
48+
</div>
49+
</div>
50+
<div class="field">
51+
<label class="label">Password</label>
52+
<div class="control has-icons-left">
53+
<input class="input" type="password" placeholder="Password" bind:value={password}>
54+
<span class="icon is-small is-left">
55+
<i class="fas fa-lock"></i>
56+
</span>
57+
</div>
58+
</div>
59+
<pre>Enter any <strong>username = password </strong>to login</pre>
60+
<div class="field">
61+
<p class="control">
62+
<button class="button is-success" on:click={handleLogin}>
63+
Login
64+
</button>
65+
</p>
66+
</div>
67+
</div>
68+
{:else}
69+
<div class="column">
70+
Logged in as: {$user} <br>
71+
Now you may access the <strong>secure area </strong>from the Nav above
72+
</div>
73+
{/if}
74+
<div class="column"></div>
75+
</div>
76+
</div>

client/pages/Logout.svelte

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<script>
2+
import {user} from './../store.js';
3+
import {onMount} from 'svelte';
4+
5+
let errorMessage;
6+
onMount(async() => {
7+
const res = await fetch('/auth/logout',{credentials: 'same-origin'});
8+
let logoutResponse = await res.json();
9+
if (logoutResponse.result == "error") {
10+
errorMessage = logoutResponse.message;
11+
}else {
12+
user.set('');
13+
}
14+
});
15+
</script>
16+
<div class="content">
17+
{#if $user}
18+
You are still logged in as {$user}
19+
{:else}
20+
Bye Bye!
21+
{/if}
22+
</div>

client/pages/Secure.svelte

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<script>
2+
let secureContent='';
3+
import {onMount} from 'svelte';
4+
onMount( async() => {
5+
const res = await fetch('/api/secure',{credentials: 'same-origin'});
6+
secureContent = await res.json();
7+
})
8+
</script>
9+
<div class="content">
10+
11+
<p>
12+
This is secret secure area!! <br>
13+
Here's the secret message from the server:
14+
( if you are not logged in, result should be "error")<br>
15+
<strong>Result: </strong>{secureContent.result} <br>
16+
<strong>Message: </strong>{secureContent.message} <br>
17+
</p>
18+
</div>

client/store.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { writable } from 'svelte/store';
2+
export const user = writable('');

0 commit comments

Comments
 (0)