UNPKG

@drop-in/new

Version:

A SvelteKit Svelte 5 PocketBase Starter Kit with a CLI

57 lines (51 loc) 1.39 kB
import crypto from 'crypto'; import { get_full_user_by_email } from './find_user'; import { verify_password } from './password'; import { create_jwt } from './jwt'; import { User } from './schema'; import { create_refresh_token } from './token'; import { password } from '@clack/prompts'; /** * Logs in a user with the given email and password. * * @param email - The email of the user * @param password - The password of the user * @returns The user object, JWT, and refresh token if successful, null otherwise */ export async function login( email: string, password: string, ): Promise<{ user: Partial<User>; jwt: string; refresh_token: string; } | null> { try { // Check if a user exists with that email const user = await get_full_user_by_email(email); if (!user) { return null; } // Is the password correct? const is_verified = await verify_password(password, user.password_hash); // If the password is not correct, return null if (!is_verified) { return null; } // Create a JWT and refresh_token const jwt = await create_jwt(user.id); const refresh_token: string = await create_refresh_token(user.id); return { user, refresh_token, jwt, }; } catch (e) { console.error('Error during login:', e); if (e instanceof Error) { throw new Error(e.message); } else { throw new Error('An unknown error occurred'); } } }