feat(#9): Add sign in and sign out

This commit is contained in:
Josh Creek
2024-04-06 21:46:04 +01:00
parent 6cfa2bd6d7
commit 869be67c54
3 changed files with 94 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
<script lang="ts">
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
function emitSignedInEvent() {
dispatch('signedIn', {});
}
let email = '';
let password = '';
// Access the supabase client from the layout data
export let supabase: any;
async function signInWithEmail() {
// TODO use the data and error from the response
const { data, error } = await supabase.auth
.signInWithPassword({
email: email,
password: password
})
.then(() => {
emitSignedInEvent();
});
}
</script>
<input type="email" bind:value={email} placeholder="Email" />
<input type="password" bind:value={password} placeholder="Password" />
<button on:click={signInWithEmail}>Sign In</button>
+20
View File
@@ -0,0 +1,20 @@
<script lang="ts">
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
function emitSignedOutEvent() {
dispatch('signedOut', {});
}
// Access the supabase client from the layout data
export let supabase: any;
async function signOut() {
// TODO use the error from the response
const { error } = await supabase.auth.signOut().then(() => {
emitSignedOutEvent();
});
}
</script>
<button on:click={signOut}>Sign Out</button>
+44
View File
@@ -1,9 +1,53 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte';
import SignUp from '$lib/components/SignUp.svelte'; import SignUp from '$lib/components/SignUp.svelte';
import SignIn from '$lib/components/SignIn.svelte';
import SignOut from '$lib/components/SignOut.svelte';
export let data; export let data;
let { supabase } = data; let { supabase } = data;
$: ({ supabase } = data); $: ({ supabase } = data);
let userEmail = null as string | null | undefined;
onMount(async () => {
await setUserEmail();
});
async function getUser() {
const {
data: { session }
} = await supabase.auth.getSession();
if (session) {
console.log(session.user);
return session.user;
}
return null;
}
async function getUserEmail() {
const user = await getUser();
if (user) {
return user.email;
}
return null;
}
async function setUserEmail() {
userEmail = await getUserEmail();
}
</script> </script>
{#if userEmail}
<span>Welcome back {userEmail}</span>
<br />
{/if}
<SignUp {supabase} /> <SignUp {supabase} />
<br />
<SignIn {supabase} on:signedIn={setUserEmail} />
<br />
<SignOut {supabase} on:signedOut={setUserEmail} />