bounty还有16小时到期。此问题的答案有资格获得+50声望奖励。hantoren希望引起更多关注这个问题。
我尝试使用Next.js应用程序中的next/headers模块删除cookie,但它似乎无法按预期工作。下面是代码片段:
import {cookies} from "next/headers";
export default async function Signout() {
async function deleteTokens() {
"use server"
cookies().delete('accessToken')
}
await deleteTokens()
return (
<></>
);
}
我期望cookie().delete('accessToken')行删除名为“accessToken”的cookie,但似乎没有任何效果。该cookie在函数执行后仍然存在。
我收到以下错误:错误:只能在服务器操作或路由处理程序中修改Cookie。阅读更多:https://nextjs.org/docs/app/api-reference/functions/cookies#cookiessetname-value-options
但是我已经设置了“使用服务器”,并在next.config.js中启用了它。
2条答案
按热度按时间nimxete21#
也许你需要在动作上使用
set
方法。从这里很高兴知道:.set()仅在服务器操作或路由处理程序中可用
要“删除”cookie,您必须设置一个新的cookie名称和一个空值。您也可以将maxAge设置为0以立即使cookie过期。
来自相同文档的示例:
from this issue,可能在13.4.2之后
qyzbxkaa2#
这里的问题是,您的函数作为服务器组件的一部分运行,而不是作为服务器操作运行。您可以将函数作为服务器操作执行,方法是将其传递给客户端组件,然后在页面加载时从客户端组件调用它。
P.S.这与您最初的问题没有直接关系,但此实现容易出现CSRF漏洞-https://security.stackexchange.com/questions/62769/should-login-and-logout-action-have-csrf-protection