remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
login.server.ts
(1007B)
1 import { withZod } from "@remix-validated-form/with-zod";
2 import { validationError } from "remix-validated-form";
3 import invariant from "tiny-invariant";
4 import { getUserByEmail } from "~/models/user.server";
5 import { createUserSession, destroyUserSession } from "~/session.server";
6 import { loginSchema } from "~/schemas/login";
7
8 export function logOut(request: Request) {
9 return destroyUserSession(request);
10 }
11
12 export async function logIn(request: Request) {
13 const serverValidator = withZod(
14 loginSchema
15 .transform(async (data) => ({
16 ...data,
17 user: await getUserByEmail(data.email),
18 }))
19 .refine((data) => data.user, {
20 message: "Email does not exist",
21 path: ["email"],
22 })
23 );
24
25 const { error, data } = await serverValidator.validate(
26 await request.formData()
27 );
28
29 if (error) return validationError(error);
30 invariant(data.user, "Expected user to exist");
31
32 return createUserSession({
33 request,
34 userId: data.user.id,
35 });
36 }