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 }