2022-05-14 12:22:06 +02:00
|
|
|
import { type ActionFunction, json } from "@remix-run/node";
|
|
|
|
|
|
|
|
import { SignIn } from "../validations";
|
|
|
|
import { type FormError, validate } from "~/utils/validation.server";
|
|
|
|
import { authenticate } from "~/utils/auth.server";
|
|
|
|
|
|
|
|
export type SignInActionData = { errors: FormError<typeof SignIn> };
|
|
|
|
|
|
|
|
const action: ActionFunction = async ({ request }) => {
|
|
|
|
const formData = Object.fromEntries(await request.clone().formData());
|
|
|
|
const validation = validate(SignIn, formData);
|
|
|
|
if (validation.errors) {
|
|
|
|
return json<SignInActionData>({ errors: validation.errors });
|
|
|
|
}
|
|
|
|
|
|
|
|
const searchParams = new URL(request.url).searchParams;
|
|
|
|
const redirectTo = searchParams.get("redirectTo");
|
2022-05-20 00:29:12 +02:00
|
|
|
const successRedirect = redirectTo ? decodeURIComponent(redirectTo) : null;
|
2022-05-14 12:22:06 +02:00
|
|
|
const { email, password } = validation.data;
|
2022-05-20 00:29:12 +02:00
|
|
|
return authenticate({ email, password, request, successRedirect });
|
2022-05-14 12:22:06 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
export default action;
|