next.jscookiesserver-action

I can't delete cookies on production


I'm encountering an issue in production where cookies are not being deleted on signing out, causing users to be redirected to the main page instead of the login page. This behavior works as expected in development mode, but I'm unsure how to address this problem in production. Please, help.

signout page:

"use client";

import { useEffect } from "react";

import signOut from "../(main)/actions/auth/sign-out";

export default function SignoutPage() {
  useEffect(() => {
    signOut();
  }, []);

  return (
    <div>
      <h1>Signing out</h1>
    </div>
  );
}

signout action:


"use server";

import { cookies } from "next/headers";
import { redirect } from "next/navigation";

export default async function signOut() {
  const cookieStore = cookies();

  cookieStore.delete("refreshToken");
  cookieStore.delete("accessToken");
  cookieStore.delete("session");

  redirect("/login");
}

Solution

  • I accidentally discovered that you can enter an object as argument. Adding extra fields to the delete function, which isn't mentioned in the docs. This resolved the issue, although I'm not sure which specific field did the trick.

    cookieStore.delete({
    name: "session",
    httpOnly: true,
    secure: process.env.NODE_ENV !== "development",
    sameSite: process.env.NODE_ENV === "development" ? "lax" : "none",
    maxAge: 0,
    path: "/",
    ...(process.env.NODE_ENV === "production" && {
      domain: process.env.NEXT_PUBLIC_DOMAIN,
      }),
    });