我在生产中遇到一个问题,即注销时未删除 cookie,导致用户被重定向到主页而不是登录页面。此行为在开发模式下按预期工作,但我不确定如何在生产中解决此问题。请帮忙。
退出页面:
"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>
);
}
注销操作:
"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");
}
我无意中发现你可以为删除功能添加额外的选项,这在docs中没有提到。添加这些额外的字段解决了问题,尽管我不确定哪个特定字段可以解决问题。
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,
}),
});