add auth remote functions and validation schemas

This commit is contained in:
hiperman
2026-02-22 01:43:09 -05:00
parent 2bb3b48e28
commit 0dbfd618f3
2 changed files with 62 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
import { invalid, redirect } from '@sveltejs/kit';
import { form, getRequestEvent, query } from '$app/server';
import { auth } from '$lib/server/auth';
import { signupSchema, loginSchema } from '$lib/server/schemas/auth';
export const signup = form(signupSchema, async (user, issue) => {
try {
await auth.api.signUpEmail({ body: user });
} catch (error: any) {
console.error(error)
// Use invalid to mark fields as invalid
if (error?.body?.code === 'USER_ALREADY_EXISTS') {
invalid(issue.email('An account with this email already exists'));
}
// Generic error for the whole form
invalid(error?.body?.message || error?.message || 'Signup failed');
}
redirect(307, `/`);
});
export const login = form(loginSchema, async (user, issue) => {
try {
const { request } = getRequestEvent();
await auth.api.signInEmail({ body: user, headers: request.headers });
} catch (error: any) {
// Handle invalid credentials
if (error?.body?.code === 'INVALID_EMAIL_OR_PASSWORD') {
invalid('Invalid email or password');
}
// Generic error
invalid('Login failed');
}
redirect(303, '/');
});
export const logout = form(async () => {
const { request } = getRequestEvent();
await auth.api.signOut({ headers: request.headers });
redirect(303, '/login');
});
export const getUser = query(async () => {
const { locals } = getRequestEvent();
if (!locals.user) {
redirect(307, '/login');
}
return locals.user;
});
+12
View File
@@ -0,0 +1,12 @@
import * as v from 'valibot';
export const signupSchema = v.object({
name: v.pipe(v.string(), v.minLength(4)),
email: v.pipe(v.string(), v.email()),
password: v.pipe(v.string(), v.minLength(8))
});
export const loginSchema = v.object({
email: v.pipe(v.string(), v.email()),
password: v.pipe(v.string(), v.minLength(1, 'Must provide a password'))
});