sso-core/src/routes/login/+page.server.ts

41 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-05-16 23:17:06 +03:00
import { Users } from '$lib/server/users/index.js';
import { fail, redirect, type Actions } from '@sveltejs/kit';
export const actions = {
default: async ({ request, locals, url }) => {
// Redirect
const redirectUrl = url.searchParams.has('redirectTo')
? (url.searchParams.get('redirectTo') as string)
: '/';
// Already logged in
if (locals.session.data?.user) {
return redirect(303, redirectUrl);
}
const data = await request.formData();
const email = data.get('email') as string;
const password = data.get('password') as string;
if (!email?.trim() || !password?.trim()) {
return fail(400, { incorrect: true });
}
// Find existing active user
const loginUser = await Users.getByLogin(email);
// Compare user password
if (!loginUser || !(await Users.validatePassword(loginUser, password))) {
return fail(400, { email, incorrect: true });
}
// TODO: check two-factor
// Create session data for user
const sessionUser = await Users.toSession(loginUser);
await locals.session.set({ user: sessionUser });
return redirect(303, redirectUrl);
}
} as Actions;