59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { dev } from '$app/environment';
|
|
import { API_URL } from '$env/static/private';
|
|
import { fail, redirect } from '@sveltejs/kit';
|
|
import type { Actions, PageServerLoad } from './$types';
|
|
|
|
import { zod } from 'sveltekit-superforms/adapters';
|
|
import { setError, superValidate } from 'sveltekit-superforms/server';
|
|
|
|
import { loginSchema } from '$lib/validations/auth';
|
|
|
|
export const load: PageServerLoad = async ({ locals: { user } }) => {
|
|
if (user) redirect(302, '/');
|
|
|
|
const form = await superValidate(zod(loginSchema));
|
|
|
|
return {
|
|
title: 'Connexion',
|
|
form
|
|
};
|
|
};
|
|
|
|
export const actions: Actions = {
|
|
default: async ({ request, cookies, fetch, url: { searchParams } }) => {
|
|
const form = await superValidate(request, zod(loginSchema));
|
|
|
|
if (!form.valid) {
|
|
return fail(400, { form });
|
|
}
|
|
|
|
const res = await fetch(`${API_URL}/login`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
...form.data
|
|
})
|
|
});
|
|
|
|
if (!res.ok) {
|
|
return setError(form, 'passwd', "Nom d'utilisateur ou mot de passe incorrect");
|
|
}
|
|
|
|
const token = res.headers.get('Authorization')?.split('Bearer ').pop();
|
|
|
|
if (!token) {
|
|
return setError(form, 'passwd', "Une erreur est survenue, veuillez réessayer plus tard");
|
|
}
|
|
|
|
cookies.set('session', token, {
|
|
path: '/',
|
|
secure: !dev,
|
|
sameSite: 'strict',
|
|
});
|
|
|
|
const redirectTo = searchParams.get('redirectTo');
|
|
|
|
if (redirectTo) redirect(302, `/${redirectTo.slice(1)}`);
|
|
|
|
redirect(302, '/');
|
|
}
|
|
};
|