From 273db57e7bf7885359da97166fc0725dfc48622a Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Sun, 12 Oct 2025 00:12:42 +0700 Subject: [PATCH] :necktie: (necktie) add logic to store the cookies --- features/auth/lib/submitRegisterForm.ts | 19 +++++++++++++++++-- features/auth/types/callbackFromBackend.ts | 6 ++++++ .../auth/ui/components/ProvisionInput.tsx | 3 ++- shared/constants/cookie.key.ts | 4 ++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 features/auth/types/callbackFromBackend.ts create mode 100644 shared/constants/cookie.key.ts diff --git a/features/auth/lib/submitRegisterForm.ts b/features/auth/lib/submitRegisterForm.ts index e7bd4b4..e2da625 100644 --- a/features/auth/lib/submitRegisterForm.ts +++ b/features/auth/lib/submitRegisterForm.ts @@ -4,7 +4,10 @@ import { apiErrorHandler } from "@/shared/lib/ky/errorHandler"; import { RegisterInputs } from "../ui/components/ProvisionInput"; import { ServerRequestCallback } from "@/shared/types/ServerRequestCallback"; import { generateRandomString } from "@/shared/helper/generateRandomString"; +import { CallbackFromBackend } from "../types/callbackFromBackend"; +import { cookies } from "next/headers"; import { api } from "@/shared/lib/ky/connector"; +import { COOKIE_KEYS } from "@/shared/constants/cookie.key"; export const submitRegisterForm = async ( data: RegisterInputs @@ -30,13 +33,25 @@ export const submitRegisterForm = async ( email: data.email, password: data.password, }; - const callback = await api.post("users", { json: payload }).json(); + const callback = (await api + .post("users", { json: payload }) + .json()) as CallbackFromBackend; + + (await cookies()).set({ + name: COOKIE_KEYS["AUTH"], + value: callback.data!, + httpOnly: true, + secure: process.env.NODE_ENV === "production", + path: "/", + sameSite: "lax", + maxAge: 60 * 60 * 24 * 7, + }); return { success: true, status: 200, text: { message: "Registration successful" }, - data: callback, + data: callback.data, }; } catch (error) { return apiErrorHandler(error); diff --git a/features/auth/types/callbackFromBackend.ts b/features/auth/types/callbackFromBackend.ts new file mode 100644 index 0000000..0f9e2db --- /dev/null +++ b/features/auth/types/callbackFromBackend.ts @@ -0,0 +1,6 @@ +export interface CallbackFromBackend { + success: boolean; + status: number; + message: string; + data?: T; +} diff --git a/features/auth/ui/components/ProvisionInput.tsx b/features/auth/ui/components/ProvisionInput.tsx index 77dd43e..180189d 100644 --- a/features/auth/ui/components/ProvisionInput.tsx +++ b/features/auth/ui/components/ProvisionInput.tsx @@ -6,6 +6,8 @@ import { SubmitHandler, useForm } from "react-hook-form"; import { submitRegisterForm } from "../../lib/submitRegisterForm"; import { zodResolver } from "@hookform/resolvers/zod"; import { registerFormSchema } from "../../models/registerForm.schema"; +import { COOKIE_KEYS } from "@/shared/constants/cookie.key"; +import { useRunOnce } from "@/shared/hooks/useRunOnce"; type Props = { fullname: string; @@ -43,7 +45,6 @@ const ProvisionInput = ({ fullname }: Props) => { description: returnData.text.message, }); } else { - console.log(returnData); setSubmitStatus(false); addToast({ color: "success", diff --git a/shared/constants/cookie.key.ts b/shared/constants/cookie.key.ts new file mode 100644 index 0000000..b6d682a --- /dev/null +++ b/shared/constants/cookie.key.ts @@ -0,0 +1,4 @@ +export const COOKIE_KEYS = { + AUTH: "auth_token", + CSRF: "csrf_token", +};